は、それが容易になり、より少ないUnicodeDetectionErrorを上げませんか?
実行時にリテラルではなく、文字列で行う可能性があります。 'Ӹ'
文字を含む文字列を想像してください。どのようにユニコードでu'Ӹ'
に変換できると思いますか?それはデコードされなければなりません!
Ӹ
は、UnicodeコードポイントU+04F8 CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
です。 'Ӹ'
とu'Ӹ'
は同じ方法でエンコードされていません(実際は、U + 04F8をサポートする8ビットエンコーディングも見つからないため)、単純に一方を他方に直接変更することはできません。文字列は、ソースエンコーディング(ASCII、ISO-8859-1など)からターゲットエンコーディング(UTF-8、UTF-16、UTF-32)で表現できる仲介者(ISO 10646、Unicode)にデコードする必要があります。 、など)。
なぜ文字列を最初にデコードする必要がありますか?
連結される2つの値は、連結する前に同じエンコーディングにする必要があるためです。
とにかくUnicodeに変換される場合、文字列に非ASCII文字が含まれているとどうなるのはなぜですか?
ASCII以外の文字は異なるエンコーディングで表現されるため、ユニコードはユニバーサルですが、他のエンコーディングはユニバーサルです。 Pythonは何百ものエンコーディングをサポートしています。
たとえば、ユーロ記号(€
、Unicode codepoint U+20AC
)を取ってください。これはASCIIおよびほとんどのISO-8859-Xエンコーディングでは存在しませんが、ISO-8859-7、-15、および-16ではバイト0xA4として、Windows-1251では0x88としてエンコードされます。しかし、0xA4は、他のエンコーディングでは異なるUnicodeコードポイントを表します。それは、ISO-8859-1で(U+00A4 CURRENCY SIGN
)¤
ですが、ISO-8859-2でŁ
(U+0141 CAPITAL LETTER L WITH STROKE
)であるなど
ですから、PythonがUnicodeに0xA4のを変換するために期待しますか?
U+00A4
、
U+0141
、または
U+20AC
に変換する必要がありますか?
だから、文字列エンコーディングは重要です!
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
「16進バイト」とは何ですか? –
あなたはPythonのどのバージョンについて話していますか? –
@KerrekSBそれは意味をなさないと申し訳ありません - 私は16進数で表されたバイト(1つのASCII文字で)を意味しました。 – cafekaze