ブログっ...!

最近はミソフォニアのことばかり書いています。もうミソフォニアブログです。

Unicodeでつまずく

プログラム書いてると、目視すれば明らかにあっているのに、予想したような答えにならない!てなことはよくある。
だいたい、自分の不注意。

しかし極たまにその「だいたい」に例外的に当てはまらないときがあって、
一例として日本語文字列操作のとき。

今日自分がTAをやっている授業で、emacsを使う生徒にそういう類の災難が。
「"… で … “ = ”… で … “ が false にevalされる。なんで??」
と困っている生徒。

emacs上でevalしても、
ターミナル上のOCaml対話モードで実行しても同じ結果。

ぐっ、これはUnicodeのアレがアレでこうでは…

こういういわゆる汚い部分は実は去年結構聞いたことがあった。
(汚いと言っては失礼かもしれない、けど実際汚い。)

数学やってるときに、「レジスタにこの数字を mov してー」と言わない。
日本語話すときに、「その発音を文字コードに書きあらわすとー」とか言わない。
まるで数学の式を書くようにプログラムを描きたいし、喋るように日本語をpcに打ちたい。
そんな願望を叶えるため、裏方でわっせわっせと汚い部分と触れ合っているお方がインターン先にいらっしゃった。

実際自分もインターン初期頃に bidi 関連の小さいバグを直していて、
そしてインターン先で初めて気づいた。
「あらゆる言語を表示すんのって、大変なんだな…」
初めてそっちの話を聞いたときは、あまりにも日常にない会話だったので目眩がした記憶があるw
まあ実際、私もそのときになるまでそのへんの汚い問題は知らなかった。
先代(?)が標準作ってわっせわっせ綺麗に隠蔽してくれてたので、
そんな汚いところは知らず平和に生活をしていたわけである。
(汚い汚い連呼してすみません。。)

しかし、先に戻って、このエラーである。
「"… で … “ = ”… で … “」
一体どうしてこの右の「で」が「で」ではなく「で」になってしまったのかわからないが、
で (\u3067)
で (\u3066\u3099)
この見た目が同じ「で」っぽく見える二つが混在してたのが原因。

ばびぶべぼ
(\u3070\u3073\u3076\u3079\u307C)

ばびぶべぼ
(\u306F\u3099\u3072\u3099\u3075\u3099\u3078\u3099\u307B\u3099)

う、う、、

/(>__<)\

結合文字つかった濁音つきの文字は、
後ろにカーソルキー合わせて delete キー押すとその結合文字だけ消えるし。
前方の文字に結合しているから、カーソル移動させても2つ飛ばしになるし。

emacs で、結合文字使った濁音を入力する方法あるんだろうか。
(外部からのコピペではなく、素直に入力して)
一体この「で (\u3066\u3099)」どこからきたのか、結局わからなかった。

私もエディタ作らないと、この類の問題には触れ合えないきがするぞ。。
しかし、下の参考にした3つ目のサイトも言っているが、ページ内検索すると 「で (\u3067)」「で (\u3066\u3099)」どっちもハイライトされてるのが微笑ましい(^ - ^ ))にこにこ….

見た:

Text Escaping and Unescaping in JavaScript

Unicodeのgrapheme cluster (書記素クラスタ) | hydroculのメモ

日本の文字とUnicode 第3回 | 大修館書店 WEB国語教室