EUC-JIS-2004とShift_JIS-2004のファイルをそれぞれUTF-8に変換して、その結果を比較します。
Python
https://www.python.org/
libiconv
http://www.gnu.org/software/libiconv/
変換元となるファイルについては、プロジェクトX0213の「JIS X 0213とUnicodeの対応表」から、文字付き版のファイルを使用しました。
JIS X 0213とUnicodeの対応表
http://x0213.org/codetable/
EUC-JIS-2004とUnicodeの対応表 文字付き版
http://x0213.org/codetable/euc-jis-2004-with-char.txt
Shift_JIS-2004とUnicodeの対応表 文字付き版
http://x0213.org/codetable/sjis-0213-2004-with-char.txt
今回使用した環境、バージョンは以下の通りです。
- cygwin 2.6.0 (0.304/5/3)
- Python 3.4.5
- libiconv 1.14
追記: Pythonでの変換に使用した pconv.py は以下のようなコードです。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
import codecs
import sys
if __name__ == "__main__":
if (len(sys.argv) != 5):
print('usage: python pconv.py <enc_from> <inputfile> <enc_to> <outputfile>')
sys.exit(1)
for arg in sys.argv:
print(arg)
output = codecs.open(sys.argv[4], 'w', sys.argv[3])
for line in codecs.open(sys.argv[2], 'r', sys.argv[1]):
try:
output.write(line)
except UnicodeEncodeError:
print('UnicodeEncodeError')
break
output.close()
EUC-JIS-2004
$ python3 pconv.py euc_jis_2004 euc-jis-2004-with-char.txt utf_8 euc-jis-2004-python.txt追記: diff-euc-jis-2004.txt
$ iconv -f EUC-JIS-2004 -t UTF-8 euc-jis-2004-with-char.txt > euc-jis-2004-iconv.txt
$ diff euc-jis-2004-python.txt euc-jis-2004-iconv.txt > diff-euc-jis-2004.txt
216c216
< ― 0xA1BD U+2014 # EM DASH Windows: U+2015
---
> — 0xA1BD U+2014 # EM DASH Windows: U+2015
335,336c335,336
< ⦅ 0xA2D6 U+FF5F # FULLWIDTH LEFT WHITE PARENTHESIS [2000] [Unicode3.2]
< ⦆ 0xA2D7 U+FF60 # FULLWIDTH RIGHT WHITE PARENTHESIS [2000] [Unicode3.2]
---
> ⦅ 0xA2D6 U+FF5F # FULLWIDTH LEFT WHITE PARENTHESIS [2000] [Unicode3.2]
> ⦆ 0xA2D7 U+FF60 # FULLWIDTH RIGHT WHITE PARENTHESIS [2000] [Unicode3.2]
EUC-JIS-2004の変換では、3つの文字で異なる変換結果が得られました。
- 0xA1BD EM DASH
- Python U+2015
- iconv U+2014
- 0xA2D6 FULLWIDTH LEFT WHITE PARENTHESIS
- Python U+2985
- iconv U+FF5F
- 0xA2D7 FULLWIDTH RIGHT WHITE PARENTHESIS
- Python U+2986
- iconv U+FF60
Shift_JIS-2004
$ python3 pconv.py shift_jis_2004 sjis-0213-2004-with-char.txt utf_8 sjis-0213-2004-python.txt追記: diff-sjis-0213-2004.txt
$ iconv -f Shift_JIS-2004 -t UTF-8 sjis-0213-2004-with-char.txt > sjis-0213-2004-iconv.txt
$ diff sjis-0213-2004-python.txt sjis-0213-2004-iconv.txt > diff-sjis-0213-2004.txt
310c310
< ― 0x815C U+2014 # EM DASH Windows: U+2015
---
> — 0x815C U+2014 # EM DASH Windows: U+2015
313c313
< \ 0x815F U+005C # REVERSE SOLIDUS Fullwidth: U+FF3C
---
> \ 0x815F U+005C # REVERSE SOLIDUS Fullwidth: U+FF3C
393c393
< ~ 0x81B0 U+007E # TILDE [2000] Fullwidth: U+FF5E
---
> ~ 0x81B0 U+007E # TILDE [2000] Fullwidth: U+FF5E
429,430c429,430
< ⦅ 0x81D4 U+FF5F # FULLWIDTH LEFT WHITE PARENTHESIS [2000] [Unicode3.2]
< ⦆ 0x81D5 U+FF60 # FULLWIDTH RIGHT WHITE PARENTHESIS [2000] [Unicode3.2]
---
> ⦅ 0x81D4 U+FF5F # FULLWIDTH LEFT WHITE PARENTHESIS [2000] [Unicode3.2]
> ⦆ 0x81D5 U+FF60 # FULLWIDTH RIGHT WHITE PARENTHESIS [2000] [Unicode3.2]
Shift_JIS-2004の変換では、5つの文字で異なる変換結果が得られました。
- 0x815C EM DASH
- Python U+2015
- iconv U+2014
- 0x815F REVERSE SOLIDUS
- Python U+005C
- iconv U+FF3C
- 0x81B0 TILDE
- Python U+007E
- iconv U+FF5E
- 0x81D4 FULLWIDTH LEFT WHITE PARENTHESIS
- Python U+2985
- iconv U+FF5F
- 0x81D5 FULLWIDTH RIGHT WHITE PARENTHESIS
- Python U+2986
- iconv U+FF60
まとめ
FULLWIDTH LEFT WHITE PARENTHESIS と FULLWIDTH RIGHT WHITE PARENTHESIS が FULLWIDTH でなくなってしまうのが、Pythonのいまいちな点でしょうか。
今回の使用・作成したファイルをGitHubに上げていますので、興味のある方はご覧ください。
https://github.com/nathancorvussolis/difference-between-python-and-iconv
さらに追記:
すでにShift_JIS-2004の変換をまとめている方がおられたのでリンクしておきます。
iconv、Java、PythonのJISX0213 - yuan-jiu blog
http://yuan-jiu.asablo.jp/blog/2013/05/11/6807043
0 件のコメント:
コメントを投稿