Home > お知らせ > 「〜」は2つある!?

「〜」は2つある!?

文字コードセットutf-8で開発を行っていたところ、見た目はまったく同じなのに、何故かstrcmpとか正規表現マッチとか試してみても絶対通らないという現象がおこりました。次のような文字列です。

1.「こんにちは〜開発からのお知らせ〜」

2.「こんにちは〜開発からのお知らせ〜」

理由がわからず、2時間ほど悪戦苦闘・・・・。まさかとは思いながら16進数で表示して全部チェックすると、

あれれ

なんか違う・・・

まさか、見た目は同じなのに文字コードが違う??文字コードセットはutf-8に変換しているのに・・

というわけで、一文字ずつ調べていくと、「〜」の文字コードが、0xEFBD9Eと0xE3809Cと異なっていることがわかりました。

ググると、

0xEFBD9E:全角チルダ(表示は「〜」)

0xE3809C:波ダッシュ(表示は「〜」)

らしいです。見た目は同じです。

なぜこのような現象が起こったのかチェックしていくと次のようなことがわかりました。

Windows:日本語の標準文字コード(cp932:いわゆるshift-jisがベース)には、波ダッシュなるものはそもそも存在しない。「〜」=全角チルダ。よって、utf-8のファイルをwinで編集すると0xEFBD9Eで保存される。

Mac:日本語の標準文字コードはshift-jis系のようだが、ことえりはiso-2022-jp寄りっぽい。「〜」=波ダッシュ。よって、utf-8のファイルをmacで編集すると0xE3809Cで保存される。

がーん。同じutf-8なのに、winで打った文字とmacで打った文字は文字コードが異なるなんて。

また、winで作った文字列(全角チルダ)をメールの文章に入れてphpでメール送信を行うと、utf-8 → iso-2022-jp → utf-8の過程で、全角チルダが波ダッシュに変更されてしまうことがわかりました。iso-2022-jpにはどちらもあるようですが、phpのmbstringの変換表で波ダッシュに変換されているようです。(*正確かどうかの検証は行っていません。現象から判断しました。実際のところがどのような理屈か知ってらっしゃる方がいたら、ぜひ教えてください。)

結構有名な話のようですが、初めて知りました。全角ってやっかいだ・・

Comments:0

Comment Form

Trackbacks:0

Trackback URL for this entry
http://dev.tapweb.co.jp/2010/08/223/trackback
Listed below are links to weblogs that reference
「〜」は2つある!? from tap dev blog

Home > お知らせ > 「〜」は2つある!?

Search
Feeds

Return to page top