1

Python 2.7 では、Unicode として読み取り、utf-16-le として書き込みます。ほとんどの文字は正しく解釈されます。ただし、u'\u810a' のようにunichr(33034)としても知られるものもあります。次のコード コードは正しく記述されません。

import codecs
with open('temp.txt','w') as temp:
    temp.write(codecs.BOM_UTF16_LE)     
    text = unichr(33034)  # text = u'\u810a'
    temp.write(text.encode('utf-16-le'))

ただし、これらのいずれかを上記で置き換えると、コードが機能します。

  1. unichr(33033) と unichr(33035) は正しく動作します。

  2. 'utf-8' エンコーディング (BOM、バイトオーダーマークなし)。

正しく書き込まれない文字を認識するにはどうすればよいですか? また、これらの文字または代替文字を出力する BOM を含む「utf-16-le」でエンコードされたファイルを書き込むにはどうすればよいですか?

4

3 に答える 3

1

@Joniの答えが問題の根本ですが、codecs.open代わりに使用すると、指定されていなくても常にバイナリモードで開きます。コーデックを使用すると、utf16ネイティブのエンディアンも使用して BOM が自動的に書き込まれます。

import codecs
with codecs.open('temp.txt','w','utf16') as temp:
    temp.write(u'\u810a')

の 16 進ダンプtemp.txt:

FF FE 0A 81

参考:codecs.open

于 2013-09-17T06:55:38.647 に答える
0

コーデック ライブラリを既に使用しています。そのファイルを操作するときは、open() を codecs.open() と交換して、透過的にエンコードを処理する必要があります。

import codecs
with codecs.open('temp.txt', 'w', encoding='utf-16-le') as temp:
    temp.write(unichr(33033))
    temp.write(unichr(33034))
    temp.write(unichr(33035))

その後問題が発生した場合は、Python スクリプトではなく、ビューアに問題がある可能性があります。

于 2013-09-16T12:42:13.380 に答える