######初めて投稿します。素人の年寄りが少しずつpythonを始めています。備忘録として投稿します。
##目的
#####windowsで扱われているテキストベースの設定ファイルの文字コードは、ほとんどがSJISで書かれていてるが、NT系からの流れか、UTF-16で書かれたファイルもある。いろんな設定ファイルをwindowsにてメモ帳で開いて保存ウインドで表記される文字コード(E): の表記とPythonで読み取るべきコードの対比をまとめました。
##内容
メモ帳での文字コード(E): | pythonでのエンコード | 一般的なコード名 |
---|---|---|
ANSI | CP932 | SHIFT-JIS |
Unicode | utf-16 | UTF-16(リトルエンディアン) BOM付き |
Unicode big endian | utf-16 | UTF-16(ビッグエンディアン)BOM付き |
UTF-8 | utf-8-sig | UTF-8 BOM付き |
##確認 |
ld = open(Unicode.txt,encoding="utf-16")
lines = ld.readlines()
ld close()
print(lines)
Openするテキストファイルとエンコードキーワードをいろいろ変えて確認しました。
メモ帳では、UTF-8、UTF-16 もすべてBOM付きとして扱われて、Python3ではUTF-8の場合はBOM付きのエンコードである"utf-8-sig"でエンコードして、UTF-16 の場合はBOM付きの場合はリトルエンディアン/ビックエンディアンの指定なしに"utf-16"でエンコードしてくれる。-sigなんてのもいらない。(BOM無の場合は、"utf-16-le","utf-16-be"が必要らしい。Unicode.txtを"utf-16-le"でエンコードすると先頭にBOMが見えたので。。。)
##感想
知っている方には当たり前かもしれないけれど、コード体系のよくわかっていない素人の私が理解するにはコードの名称定義がそれぞれで曖昧にみえてしまい、時間がかかりました。
私自身で確認した結果のことなので齟齬があるかもしれませんが、とりあえずwindowsの世界でUnicodeとして定義されてるファイルは読める様になりました。