iconv、Java、PythonのJISX0213 ― 2013年05月11日 21:33
JISX0201とJISX0213を併用したデータをShift_JIS-2004で符号化し、iconv、Java、PythonでUTF-8に変換した結果を比較してみた。
(原則としてJISX0213はそれ自身で完結した文字集合でありJISX0208のようにJISX0201と併用するものではないが、JISX0213に移行する際にはJISX0201とJISX0208を併用した既存のデータをShit_JIS-2004として扱いたい場合もありえるので、試してみた。)
各々のバージョンとエンコーディング名は次のとおり。
- iconv (Debian EGLIBC 2.11.3-4) 2.11.3 --from-code=SHIFT_JISX0213
- java version "1.7.0_21" Charset-name "x-SJIS_0213"
- Python version 3.3.1 encoding 'shift_jis_2004'
(ブラウザによっては、U+005Cが[REVERSE SOLIDUS]ではなく[YEN SIGN]に表示される場合があります。
WindowsではIE9で問題なく[REVERSE SOLIDUS]が表示されましたが、FirefoxとGoogleChromeではフォントを変更する必要がありました。
また、使われているフォントによっては見た目では「全角」「半角」の区別がつきにくい場合もあります。)
Seq. | Shift_JIS-2004 | iconv | Java | Python |
---|---|---|---|---|
1 | 0x5C | ¥(U+00A5) | \(U+005C) | ¥(U+00A5) |
2 | 0x7E | ‾(U+203E) | ~(U+007E) | ‾(U+203E) |
3 | 0x815C | —(U+2014) | —(U+2014) | ―(U+2015) |
4 | 0x815F | \(U+FF3C) | \(U+FF3C) | \(U+005C) |
5 | 0x81B0 | ~(U+FF5E) | ~(U+FF5E) | ~(U+007E) |
6 | 0x81D4 | ⦅(U+FF5F) | ⦅(U+FF5F) | ⦅(U+2985) |
7 | 0x81D5 | ⦆(U+FF60) | ⦆(U+FF60) | ⦆(U+2986) |
- 「1」の0x5Cは[YEN SIGN]なので、U+00A5が正解。ASCIIとJISX0213の併用でない限り、U+005C[REVERSE SOLIDUS]はありえない。
- 「2」の0x7Eは[OVERLINE]なので、U+203Eが正解。ASCIIとJISX0213の併用でない限り、U+007E[TILDE]はありえない。
- 「3」は微妙。U+2014は[EM DASH]、U+2015は[HORIZONTAL BAR]。
「Project X0213(x0213.org) 」の資料を見ると、「0x213D U+2014 # EM DASH Windows: U+2015」となっている。Pythonが不正解とは言い切れない。 - 「4」~「7」はいわゆる「全角」「半角」のどちらを選ぶかの問題。Pythonは「半角」になっている。
JISX0201とJISX0213に同じ文字があればJISX0213の側は「全角」を採用し、なければ「半角」を採用するという規則にすれば「半角」が正解。
なお、iconv、Java、Pythonとも、「4」~「7」の4文字を除いてJISX0201と重複するJISX0213の英数字と記号はすべて「全角」になっていた。
正規化すれば済む話だから「どっちでもいい」が正解なのかも。
最近のコメント