1. ホーム
  2. python

[解決済み] なぜpythonではunicodeをstringで宣言するのですか?

2022-09-02 01:56:45

質問

私はまだpythonを学んでいますが、疑問があります。

Python 2.6.xでは、私は通常、次のようにファイルのヘッダでエンコーディングを宣言します(次のように)。 PEP 0263 )

# -*- coding: utf-8 -*-

この後は、いつも通り文字列を書きます。

a = "A normal string without declared Unicode"

しかし、私がPythonプロジェクトのコードを見るたびに、エンコーディングはヘッダで宣言されていません。代わりに、このようにすべての文字列で宣言されています。

a = u"A string with declared Unicode"

何が違うの?これの目的は何ですか?Python 2.6.xではデフォルトでASCIIエンコーディングが設定されているのは知っていますが、ヘッダー宣言で上書きすることができるので、文字列宣言ごとに意味があるのでしょうか?

追記です。 ファイルエンコードと文字列エンコードを混同していたようです。説明ありがとうございます :)

どのように解決するのですか?

他の方がおっしゃっているように、この2つは別物です。

を指定した場合 # -*- coding: utf-8 -*- を指定すると、Python に保存したソースファイルが utf-8 . Python 2のデフォルトはASCIIです(Python 3は utf-8 ). これはインタープリタがファイル内の文字をどのように読み取るかに影響するだけです。

一般的に、エンコーディングが何であれ、高い Unicode 文字をファイルに埋め込むことは、おそらく最良のアイデアではありません。


文字列を宣言する際に u を前にして のように u'This is a string' のように、これは Python コンパイラに文字列がバイトではなく Unicode であることを伝えます。 これはインタプリタによってほとんど透過的に処理されます。最も明らかな違いは、文字列にユニコード文字を埋め込むことができるようになったことです(つまり。 u'\u2665' が合法になったことです)。 文字列の中に from __future__ import unicode_literals を使えば、デフォルトにすることができます。

これはPython 2にのみ適用されます。Python 3では、デフォルトはUnicodeであるため、Python 2のように b のように)前に b'These are bytes' のように、バイト列を宣言します)。