「\xaf」、「\xbe」などの文字を含むテキストがあります。これは、この質問から理解できるように、ASCII エンコードされた文字です。
Python でそれらを UTF-8 に相当するものに変換したいと考えています。いつものstring.encode("utf-8")
スローUnicodeDecodeError
。たとえば、codecs
標準ライブラリを使用するなど、より良い方法はありますか?
200 文字のサンプルはこちら.
.encode
Unicode 文字列 ( unicode
2.x、str
3.x) をバイト文字列 ( str
2.x、 3.x) に変換するためのものbytes
です。
.encode
2.x では、str
オブジェクトを呼び出すことは合法です。Python は最初に暗黙的に文字列を Unicode にデコードしs.encode(e)
ますs.decode(sys.getdefaultencoding()).encode(e)
。
問題は、デフォルトのエンコーディングが「ascii」で、文字列に非 ASCII 文字が含まれていることです。これは、正しいエンコーディングを明示的に指定することで解決できます。
>>> '\xAF \xBE'.decode('ISO-8859-1').encode('UTF-8')
'\xc2\xaf \xc2\xbe'
ファイルは既に UTF-8 でエンコードされたファイルです。
# saved encoding-sample to /tmp/encoding-sample
import codecs
fp= codecs.open("/tmp/encoding-sample", "r", "utf8")
data= fp.read()
import unicodedata as ud
chars= sorted(set(data))
for char in chars:
try:
charname= ud.name(char)
except ValueError:
charname= "<unknown>"
sys.stdout.write("char U%04x %s\n" % (ord(char), charname))
未知の名前を手動で入力します:
char U000a LINE FEED
char U001e INFORMATION SEPARATOR TWO
char U001f INFORMATION SEPARATOR ONE
ASCII ではありません (ASCII コードは 127 までしかありません\xaf
。175 です)。最初に正しいエンコーディングを見つけてデコードし、次に UTF-8 で再エンコードする必要があります。
実際の文字列サンプルを提供していただけますか? 次に、おそらく現在のエンコーディングを推測できます。