UTF-8とUnicode

文字を扱うときは普段からUTF-8を使用します。Shift_JISやeucはめったに使いません。
さて、UTF-8はUnicodeなのですが、表記の方法で躓きました。
PerlやPHPなどのスクリプトで扱う場合は、たとえば「あ」なら「\xe3\x81\x82」と記述するのですが、「U+xxxx」という表記が必要な自体にでくわしました。
Flashで文字のコードを取得使用とするとこの表記でしか取得できないようで、文字を管理するにはコードで管理したほうが楽なのでこのコードで扱うことに島した。
さてここで問題です。「U+xxxx」の表記ってコレいったいナニ?といろいろ調べていくと、「UCS2」というコード体系だということが判明。Perでこの表記を取得するには以下のとおり。

my $string = 'あ';
&from_to( $string, 'utf8', 'ucs2' );
print unpack('H*', $string );
# 3042


JcodeよりもEncodeのほうがいいらしい?この当たりは試してないのでどちらとも。ただ、日本語に依存するものがないときは基本的にEncodeを使ったほうが安全という話。今回はUTF-8からUCS2なので、下手に日本語環境を考えるとコードが化けたりしかねない。
これで、文字を管理することができるようになりました。
UCS2って今まで気にしなかったコード名です。他にもUCS4とかあるようです。

UTF-8とUnicode」への2件のフィードバック

  1. はじめまして。
    BOINC日報でHTML::AAを使わせていただいている者です。

    今回メールいたしましたのは、文字コードをsjisに設定して
    pushによって動的に作成された配列 @x について
    shorter(@x); を実行すると、CPUが100%になったまま
    止まってしまいます。
    リストで @x = (1,2,3); のように作成した静的な配列なら正常に通ります。
    また、eucにすると通りますが、出来上がりの表示が崩れてダメでした。

    この件についてプログラム板で相談したところ
    バグレポとして連絡してみるべしとのアドバイスを頂きました。
    以下、この件に関する書き込みのアドレスです。
    http://pc12.2ch.net/test/read.cgi/tech/1257139591/934-

  2. ありがとうございます。
    まだPerlを覚えた手に作ったモジュールで、とりあえず動けばいいレベルのものをCPANに登録していました。
    その後、一度修正を予定していましたが、取得済みのCPANのアカウントを利用できずいろいろ調べたもののやり方がわからないまま、新しくアカウントを申請したものの許諾されず、結局放置してしまっていました。
    他にもコメントをいただいておりますので、参考にさせていただきます。ありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です