2013年5月14日火曜日

【C】エスケープされたUnicodeをデコードする

いつの間にかCに戻ってきた.
VCとかでなくPOSIXなC.

さて,鯖とのやりとりで面倒なのがエスケープされた文字列共.
URLエンコードとかUnicodeとかいろいろあるんだろうけど
今回はUnicodeのエスケープ文字列を入手してしまった場合に
こいつを力技で復元する方法を紹介する.

\uXXXX\uXXXX…ってフォーマットの文字列がエスケープされたUnicode.
鯖がどういう変換をするかはわからないがこのコード部分XXXXが分離できればいい.

URLエンコードと違ってUnicodeは腐ってもエスケープされても文字.
コードを取得して数値化し,キャラクターとして変換する.
考え方はそれだけのことである.
簡単に説明すると
コード開始文字の\uを探して文字列を分解し,
\uに続くXXXXのコードを整数に変換して
printf系で文字に直している.

ここで問題になるのがロケールの設定である.
ロケールを設定しないと正しく文字に直せない.
多分出力されない.

Linuxで
$ locale -a
と打ってやる.
出てきたリストがそのマシンで使えるロケールである.

このリストの中から望みのロケールをプログラムの最初辺りで
setlocaleしてやる.
それ以外の文字は表示されない.

つまりこんな環境ではお手上げなのである.

$ locale -a
C
POSIX
組み込み環境にありがち.

0 件のコメント:

コメントを投稿