にせねこメモ

はてなダイアリーがUTF-8じゃないので移ってきました。

PythonでJIS X 0208コードに対応するUnicode値を求める

あるデータセットで、文字情報がJIS X 0208のコードで与えられていたのだが、使い勝手がよくないのでUnicode値に変換しようとした。

やり方

Unicodeコンソーシアムが、JIS X 0208のコードからUnicode値へ変換する変換表を公開している。

今回はこれを使う。ただし、この変換表はobsoleteとなっているので、代りにUnihan Databaseを利用した方が良いのかもしれない。

JIS0208.TXTに曰く、対応表のフォーマットは

#	Format:  Four tab-separated columns
#		 Column #1 is the shift-JIS code (in hex)
#		 Column #2 is the JIS X 0208 code (in hex as 0xXXXX)
#		 Column #3 is the Unicode (in hex as 0xXXXX)
#		 Column #4 the Unicode name (follows a comment sign, '#')

となっているようで、#で始まっている行はコメントとなっているようだ。

コード

"JIS0208.TXT"と同じディレクトリで実行する。

# coding: utf-8

shift_jis = []
jisx0208 = []
unicode = []
with open("JIS0208.TXT", "r") as f:
    for line in f:
        if line[0] == "#":
            pass
        else:
            sjis, jisx, unic, _ = line.strip().split("\t")
            shift_jis.append(int(sjis,16))
            jisx0208.append( int(jisx,16))
            unicode.append(  int(unic,16))

def jis2uni(n):
    return unicode[jisx0208.index(n)]
    
if __name__ == '__main__':
    print("{:x}".format(jis2uni(0x2422)))

jis2uni()関数にJIX X 0208のコードを与えると対応するUnicode値が返ってくるというもの。なおPython 3系なら、Unicode値をchr()で文字(列)に変換できる。