lst = [ u"aaa", u"bbb", u"foo", u"bar", ... u"baz", u"zzz" ]
は、すべての文字列の前に接頭辞u
を書くことが必要なのか? lstのすべての要素がUnicode文字列になり、接頭辞なしで書くことができますか?
lst = [ u"aaa", u"bbb", u"foo", u"bar", ... u"baz", u"zzz" ]
は、すべての文字列の前に接頭辞u
を書くことが必要なのか? lstのすべての要素がUnicode文字列になり、接頭辞なしで書くことができますか?
は、Python 2.7(また、Pythonの2.6)では、あなたは、Unicodeリテラルモジュールのデフォルト行うことができます:あなたはファイルの先頭にインポートが含まれている必要があり
from __future__ import unicode_literals
、そしてそれは、すべてに適用されますファイル内の文字列リテラル。バイト文字列を強制的にb
接頭辞を使用します。
>>> from __future__ import unicode_literals
>>> "sss"
u'sss'
>>> b"x"
'x'
あなたの意図はunicodeに標準文字列のセットを変換することであるならば、あなたはあなたのリストにその関数をマップできます。ただしlst
は、非ASCIIが含まれている場合
[u"aaa", u"bbb", u"ccc"]
を与える
lst = ["aaa", "bbb", "ccc"]
map(unicode, lst)
その特定の文字列に接頭辞としてu
を付ける必要があります。そうでない場合は、変換時にこのエラーが発生します:
lst = ["\xe4"]
map(unicode,lst)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
コメントで述べたように、この答えは、Python 2.xまたは3.xの異なりますPython 3では、everything changes:
バイナリデータとUnicodeについて知っていたと思ったことはすべて変更されました。 Python 3.0では、Unicode文字列と8ビット文字列ではなく、テキストと(バイナリ)データの概念が使用されています。すべてのテキストはUnicodeです。エンコードされたUnicodeはバイナリデータとして表されます。テキストを保持するために使用される型はstrです。データを保持するために使用される型はバイトです。 2.xの状況との最大の違いは、Python 3.0でテキストとデータを混在させようとするとTypeErrorが発生するのに対し、Python 2.xではUnicodeと8ビットの文字列を混在させると、8ビット文字列には7ビット(ASCII)バイトのみが含まれていましたが、ASCII以外の値が含まれているとUnicodeDecodeErrorが返されます。この価値特有の行動は、何年にもわたって数多くの悲しい顔を引き起こしました。
私は入力を節約するより良い宣言だけを使用したいと思います。 'lst = u [" aaa "、" bbb "、" ccc "]'のようなもので、 'lst'のすべての文字列がUnicodeであることを示します。 – xralf
-1ユニコードのエンコーディングを知らず、 "ASCIIはOK"と思っています - http://www.joelonsoftware.com/articles/Unicode.htmlをご覧ください。 – jsbueno
@jsbueno - デフォルトのPython 2はどこにもありませんでした。 xエンコーディング(ASCII)は「OK」です。 OPのASCIIコードのみをASCIIコードでUnicodeに変換するOPのリストを変換するための素早く汚れたメソッドを述べました。彼は何を望んでいたのですか?彼が望むエンコーディングを指定していないので、私は完全にはわからないので、私は推測しました。このサイトに価値を追加するには、異なるエンコーディングについての詳細な説明が必要と思われる場合は、別の答えで入力してください! – Hooked
これは私が 'のPython 2.7.2 +'を使用していますが、あなたは、両方のための答えを知っていればそれができるのPython 2やPython 3 –
を使用して、あなたに依存将来に役立つ。 – xralf
Python 3.xでは、すべてのstrignsはデフォルトでunicodeであり、テキストI/O(ファイル、データベース、印刷)を扱うチャネルは、explcitエンコーディングを必要とするか、デフォルトでシステムワイドエンコーディングを使用します。 – jsbueno