websocket.elでマルチバイト文字を扱う時の注意

追記

修正されたようですので、自分で回避していた方は最新版にアップデートしてください。


websocket.el + Amon2でリアルタイム Markdown Viewer - Life is very short


で書いた、websocket.elで使った Realtime markdown viewerで
日本を使うとエラーになっていた問題は websocket.elにマルチバイト
文字列をそのまま送っていたことが原因でした。


websocket.elの websocketのフレームに収める部分で利用する
unibyte-stringという関数は 0-255の文字コードしか受付ません。
なのでマルチバイト文字列を渡す場合は、それをバイト列にする
必要があります。Perlで言うところの Encode::encodeの処理が
必要になるわけです。


Emacs Lispの場合は encode-coding-string関数で 'raw-textを
指定することで実現できます。

 (websocket-send-text websocket (encode-coding-string 文字列 'raw-text))


こうすることでマルチバイト文字列も扱えます。


単にマルチバイト文字というものを意識していないので今のような実装
なのだと思います(マルチバイト文字列のテストもないし)。ドキュメント化
されていて、バイト列を渡すという仕様であれば上記のような対応でも
いいかと思うんですが、あやふやなので issueとして報告ぐらいはして
おいた方がいいかもしれません。


このようなプログラムが扱う文字列と、外から入ってくる/出ていく文字列に
ついての話は、今月発売の WEB+DB Pressに掲載されている @さんの
Perl Hackers Hubの記事が参考になると思います(内容は Perlですが)
持っている人とか買う予定がある人はパラパラと見てみるとよいのでは
ないかと思います。


WEB+DB PRESS Vol.70

WEB+DB PRESS Vol.70

  • 作者: 成田一生,高津戸壮,はまちや2,佐藤裕介,久森達郎,大窪聡,本田謙,和田英一,天野祐介,藤吾郎(gfx),奥野幹也,川添貴生,Dr.Kein,近藤宇智朗,後藤秀宣,mala,中島聡,森田創,堤智代,A-Listers,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2012/08/24
  • メディア: 大型本
  • 購入: 8人 クリック: 89回
  • この商品を含むブログ (15件) を見る