2017-08-17 3 views
0

私は日前Unicodeの痛みの記事について慎重に読み、時間前にこの質問をした:なぜ私は任意のUnicode文字で変数を直接宣言できるので、PythonはUnicode型を必要としますか?

Do I have to encode unicode variable before write to file?

しかし、最近の奇妙な質問は私の心に入って来ました。

私はこれらのコードは正常に動作していることが分かった:私は両方PY2とPY3に任意のUnicode文字を直接変数を宣言することができるので、

chinese = ['中文', '你好'] # py2, these are bytes, type is str 
with open('filename', 'wb') as f: 
    f.writelines(chinese) 

のpython(または私たちを)何Unicodeの種類関与を取得?プログラム全体を通してstr(py2)とbytes(py3)型を使用することはできませんか?その後、いわゆるユニコードの痛みは存在しません。

誰かから洞察をいただけますか?私は、任意のUnicode文字を直接変数を宣言することができますので

答えて

1

[...]

しかし、それはあなたがやったではありません。それらはのように見えますが、ソースファイルのバイトとしてエンコードされます。実際に価値があるものを何かしようとすると、例えば、スライス、添字、長さを取ると、すべてが故障する。 そのは「Unicode pain」です。

>>> '中文'[1] 
'\xb8' 
+0

はい。それは文字列の操作について私が考えてきたものです。しかし私は、私が知らない他の理由があるかどうかを知りたいだけです。 「実際に価値があるものを何かしようとすると、たとえば、スライス、下付き文字、長さを取ると、すべてが故障します。 "ユニコートの痛み"の原因ですか? – Tianqing

+1

テキストはテキストで、バイトはバイトです。バイトでしか作業したくないのであれば問題ありませんが、テキストを扱っているとふり返ったりしないでください。 –

関連する問題