読者です 読者をやめる 読者になる 読者になる

<Linux, Windows, Vim, Python> 文字コードの確かめ方

文字コード character encodingの確かめ方。

Linux

[1]>locale              # 設定をみる。
LANG="ja_JP.UTF-8"
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_ALL=

[2]>nkf -g hage.txt     # 各ファイルのコードを確認する。
UTF-8


[3]>file -b hage.txt    # 別の方法。
Non-ISO extended-ASCII text, with CRLF line terminators

Windows

C:\>chcp
現在のコード ページ: 932   # shift-jis

コードページ一覧。
Code Page Identifiers (Windows)

Vim

: set enc?
  encoding=utf-8

Vim / ファイルの中身

: set fileencoding?
  fileencoding=utf-8

セットするには?の代わりに=sjisとかにする。

: set fileencoding=sjis

Vimマニュアル。
mbyte - Vim日本語ドキュメント

Python

20170423 追加。
chardetちゅうモジュールをpipして使う。

In [1]: import chardet

In [8]: import requests

In [9]: r = requests.get('http://kakaku.com')

In [10]: chardet.detect(r.content)
Out[10]: {'confidence': 0.99, 'encoding': 'SHIFT_JIS', 'language': 'Japanese'} 

応用。
ファイルをバイナリモードmode='rb'で読み込む

In [1]: import chardet

In [2]: f = open('aaa.txt', mode='rb')

In [3]: f.read(100)
Out[3]: b'sdfasdfa\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\n'

In [4]: f.read()
Out[4]: b''

In [10]: f = open('aaa.txt', 'rb')

In [11]: chardet.detect(f.read())
Out[11]: {'confidence': 0.87625, 'encoding': 'utf-8', 'language': ''}

端末の設定をみる。

In [36]: import locale

In [37]: locale.getpreferredencoding()
Out[37]: 'cp932'

参考。

vorfee.hatenablog.jp

qiita.com

tweeeety.hateblo.jp

Linuxで文字コードを変換する方法

qiita.com

ファイル - Dive Into Python 3 日本語版