9

Pythonの場合:

u'\u3053\n'

utf-16ですか?

私はすべてのUnicode/エンコーディングのことを本当に知っているわけではありませんが、私が持っているかのように、このタイプのものが私のデータセットに現れていa=u'\u3053\n'ます。

print例外を与え、デコードは例外を与えます。

a.encode("utf-16") > '\xff\xfeS0\n\x00'
a.encode("utf-8") > '\xe3\x81\x93\n'

print a.encode("utf-8") > πüô
print a.encode("utf-16") >  ■S0

何が起きてる?

4

4 に答える 4

10

これは、端末のエンコーディングでは表示できないように見えるUnicode文字です。print端末のエンコーディングでUnicodeオブジェクトをエンコードしようとしますが、これができない場合は例外が発生します。

utf-8を表示できる端末では、次のようになります。

>>> print u'\u3053'
こ

端末はutf-8を表示できないようです。そうでない場合、少なくともそのprint a.encode("utf-8")行は正しい文字を生成するはずです。

于 2009-08-04T19:35:04.923 に答える
8

あなたが尋ねる:

u'\u3053\n'

utf-16ですか?

答えはノーです。これはユニコードであり、特定のエンコーディングではありません。utf-16 はエンコーディングです。

Unicode 文字列を効果的に端末に出力するには、その端末が受け入れて表示できるエンコーディングを見つける必要があります。たとえば、私のラップトップの Terminal.app は UTF-8 に設定されており、リッチ フォントが使用されているため、次のようになります。

スクリーンショット
(ソース: aleax.it )

...ひらがなが正しく表示されます。Linuxワークステーションでは、Latin-1にリセットし続ける端末プログラムがあるため、あなたのようなものを壊してしまいます-utf-8に設定できますが、フォントに膨大な数のグリフがないため、代わりに、やや役に立たないプレースホルダー グリフが表示されます。

于 2009-08-05T02:15:58.420 に答える
3

キャラクターU+3053「ひらがなレターKO」。

\xff\xfeUTF-16バイナリ形式の先頭のビットは、エンコードされたバイト順マーク(U + FEFF)であり、「S0」は\x5e\x30\n元の文字列からのものです。(リトルエンディアンのUTF-16エンコーディングを使用しているため、各文字のバイトは「反転」されています。)

UTF-8形式は、同じひらがな文字を3バイトで表し、ビットパターンはここに記載されています

さて、あなたが本当にそれをあなたのデータセットに持つべきかどうかに関しては...このデータはどこから来ているのですか?ひらがなが入っているのは妥当ですか?

于 2009-08-04T19:37:58.020 に答える
1

Python 2.6.2 の Unicode HowTo Doc は次のとおりです。

http://docs.python.org/howto/unicode.html

Joel Spolsky によるものを含む他の説明については、そのドキュメントの参照セクションのリンクも参照してください。

于 2009-08-04T19:33:30.090 に答える