pythonで 'euc-kr'でエンコードされた韓国語のテキストファイルを読み込もうとしました。 encodings
モジュールをしばらく調べた後、私はこのモジュールが韓国文字を一見非常に奇妙な方法でエンコードしていることを知りました。私は言及私はPythonはeuc-krエンコーディング(コーデック、エンコーディングモジュール)で予期しない方法で(韓国語)文字を符号化します
韓国語の文字탇が(これはほとんど使われない文字ですが、私は、発音辞書のためにこれを必要とする)(EUC-KRの仕様に応じてB5 6Eに符号化されることになっている例を見てみましょうthis site)。しかし、encodingsモジュールは私に多少異なる結果をもたらします。あなたが見ることができるように、私はB5 6Eとeuc_kr.codec.encode
は私が予想より長くバイトを与える解読しようとすると、
# python3
>> from encodings import euc_kr
>> euc_kr.codec.decode(b'\xB5\x6E')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'euc_kr' codec cant decode byte 0xb5 in position 0: illegal multibyte sequence
>> euc_kr.codec.encode('탙')
(b'\xa4\xd4\xa4\xbc\xa4\xbf\xa4\xbc', 1)
は、私はエラーを取得します。私はそこに何が起こっているのか分からない。 B5 6E(および他の多くの韓国語の文字)をデコードすると、エラーを発生させないようにするにはどうすればよいですか? EUC-KRの仕様に関するもう1つの文書は、PythonのEUC-KR実装の仕組みを理解するために読むことができますか?
はい、それは奇妙です。私はeucのエンコーディングに精通していませんが、euc_krが1バイトまたは2バイトで各コードポイントをエンコードすると仮定すると、なぜeuc_kr.codec.encode( '탙') 'が非常に多くのバイトになるのか理解できません。ところで、 'euc_kr.codec.encode(s)'を使う必要はありません。単に 's.encode( 'euc_kr')'を実行するだけです。 –