• ベストアンサー

UTF8からUnicode(コードポイント)へ変換

UTF-8の文字コードをUnicode(コードポイント)へ変換させたいのですが、参考URLの情報のように計算式を知りたいです 。 例えば下の「あ」は、16進では「E38182」、10進では「14909826」ですが、どちらかの値を利用してUnicodeのポイントコード「12354」を計算式を用いて求めたいです。 「あ」 Unicode = 12354 16進 = E38182 10進 = 14909826 参考 http://questionbox.jp.msn.com/qa500194.html

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

どこまでを「通常」と言っていいのでしょうか? いわゆる四則演算で求めるのは 「割り算。小数以下切り捨て」 「割り算の余り」 が必要になります。 0xE3 ÷ 0x10 = 0xE 余り 0x03 → この余りが 図中の4bit yyyy に相当 → これが15~12位に収まるので 0x03 * 2^12 0x81 ÷ 0x40 = 0x2 余り 0x01 → この余りが 図中の6bit yxxxxx に相当 → これが11~6位に収まるので 0x02 * 2^6 0x82 ÷ 0x40 = 0x2 余り 0x02 → この余りが 図中の6bit xxxxxx に相当 → これが5~0位に収まるので 0x01 * 2^0 全部合計したものが、Unicodeポイント また、値によって場合分けが必要です。 バイト長が一定では無いからです。 参考URLにあるものは、Unicodeを10進で表記したか、16進で表記したかの違いなので、単純な式で書けるだけです。

mrs646
質問者

お礼

3バイト文字はkmeeさんの計算式どおり出来ました。 1. 0xE3 ÷ 0x10 = 0xE 余り 0x03 * 2^12 ---> 12288 2. 0x81 ÷ 0x40 = 0x2 余り 0x01 * 2^6 ---> 64 3. 0x82 ÷ 0x40 = 0x2 余り 0x02 ---> 2 12288 + 64 + 2 = 12354 2バイト文字は、2.3.を求めることで出すことができました。 大変ありがとうございました。

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

http://ja.wikipedia.org/wiki/UTF-8 E38182 ではなく、 E3,81,82と、1バイト目、2バイト目... と考えた方がいいと思う。 全部まとめて10進数にしても、結局8ビット毎に分けて計算する必要があるので無意味。

mrs646
質問者

補足

>E38182 ではなく、 E3,81,82と、1バイト目、2バイト目... と考えた方がいいと思う。 はい。 その考え方で通常の足し算や掛け算の計算式でUnicodeのコードポイントを割り出すことはできますでしょうか?

関連するQ&A

  • UTF-8とASCIIコードにおける互換性について

    UTF-8とASCIIはそのASCIIコードの範囲のおいて 互換性を持ちます。(と、書籍や多種な文献にはそういった記述があります) たとえば【A】という文字をUTF-8で符号化した際は【41】(16進数で) さらにASCIIコードでも【41】という値がAという文字に割り当てられています。 確かに、一件互換しているようにみえますが、UTF-8っていうことは最終的には Unicode上のコードポイントの値・・・つまり0x0041という値に復元?(というのでしょうか)するわけですよね? でそのUnicodeの文字集合上から復元したコードポイントに対応する文字を参照しAという文字をみつけてくると・・・。 これって【A】という文字をUTF-8で符号化した歳のバイト列はASCIIと一致しているけれど 結局Unicodeコードポイントに直した場合【00】という上位バイトが無駄にくっついてきて【0x0041】となり 互換性がなくなるのではとおもったのですが・・・。 これはどういう意味の互換性なのでしょうか? 識者の方ご教授ください。 お願い致します。

  • 文字コードを相互変換するには?(JIS,SJIS,EUC,UTF-8,UTF-16,Unicode)

    現在、文字コード一覧を JavaScript を使って動的にリストを作成する事を行っています。 そこで質問します。 『JavaScript』では文字コードの相互変換する方法はありますか? ある場合は関数、メソッドとその使い方を簡単でいいので教えて下さい。 もし標準では出来ない場合は、どのようにすれば相互変換できるのかその方法を教えて下さい。 ●相互変換コード シフトJISコード←→JISコード シフトJISコード←→EUCコード シフトJISコード←→UTF-8 シフトJISコード←→UTF-16 シフトJISコード←→Unicode 最終的に上記の相互変換を考えています。 変換を繰り返すことで実現できると思っています。 以上。相互変換の方法をお願いします。→JavaScript 歴1.5ヵ月です。

  • UTF-8とUnicodeの互換性

    Windowsで使用されているUnicodeはUTF-16と理解しているのですが、 UTF-16→UTF-8は変換できると思いますが、 UTF-8→UTF-16の変換は一意に変換されるものなのでしょうか? UTF-16は2バイトなので65,535文字が上限になり、 一方UTF-8は1~6バイトで、実質データ部は最大4バイトなので 表現できる文字数が違うので「UTF-8→UTF-16」の完全変換は無理なのでは?と思っています。 ご存知の方すみませんがどうぞご教授ください。

  • UTF-8で5~6バイトになる文字コード

    UnicodeのUTF-8で5~6バイトになる文字コードは、どのような場合でしょうか。(サロゲートペアのコードでも4バイトです。シフトJISから変換するとき、どのようなコードが5~6バイトに割り当てられるのでしょうか。) ご存知の方おられましたら、ご教示ください。

  • HTMLユニコード?の変換

    こんにちは。大変困っていますので助けてください。 日本語の使えないデータベースに日本語を保存するため、unicode形式の→「日本」このような形式で文字を保存してあり、それをexcel+VBA上で日本語に戻したいのですが、unicodeにまったく無知なため四苦八苦しています。 まず、 (1)unicodeにもいろいろな形式があるようで、上記の書き方はとあるサイトではHTMLユニコードとかかれていましたが、これは一般的な読み方なのでしょうか?(http://code.cside.com/3rdpage/jp/unicode/converter.html) htmlユニコードで検索をしてもここ以外ではあまり引っかからず、また &#~;という形式についても調べてもよく分かりません。これはなんと呼ばれる表記方なのでしょうか? (2)そして上記のようなコードをvbaで日本語に直す場合、単純に StrConv(<文字列>, vbFromUnicode) ではうまくいかないのですが、どうやって変換すればいいのでしょうか? どうか知恵をお貸しください。よろしくお願いします。

  • ワードの特殊文字【シーベルト】のユニコード変換

    word2003 の「記号と特殊文字」の中に、 パーセントやミリなどの表記と同じで【シーベルト】の特殊文字があったので、 それをユニコード変換してhtml上に表記させたいのですが、 どうしてもできません。 ユニコード変換するときはいつも↓ここを利用しているのですが、 http://code.cside.com/3rdpage/jp/unicode/converter.html wordからペーストすると□になってしまい、変換できない。 仕事上で利用したいので、 わかる方、教えて頂ければ幸いです。 もし、出来ない場合はなぜできないのかも教えて頂ければ助かります。 よろしくお願いします。

  • CIDコードからUNICODEへの変換???

    .NETのC++でプログラムを作っています 外部から文字列が渡されますが、この文字列はCIDコードです これをUNICODEに変換して使用したいのですが、その方法が分かりません 『 CID UNICODE 変換 』をキーワードにして検索しましたが適当な資料に出会えません C++から呼べる変換関数などをご存知でしたらご指導お願い申し上げます 宜しくお願い致します

  • 文字コード変換の場合わけ。

    あるURLのソースの文字コードを判定してUnicodeに変換する メソッドや方法はありませんか? URLによってshiftJISでかかれていたり、EUC-JP で書かれているページがあるのでそれを 判定してUnicodeに変換して出力する方法が欲しいのです。 現在は InputStreamReader isr = new InputStreamReader(is,"EUC-JP"); コンストラクタを用いてコード変換を行っています。 お願いします。

    • ベストアンサー
    • Java
  • UNICODEとは何なんですか

    Shift-JISからUTF8への切り換えを勧められ、 今、文字コードや改行コードについて調べています。 取り敢えずUTF-8への変換ツールをダウンロードしてきたところです。 それで凄く分からなくなったのですが、 UNICODEって文字コードを国際的に統一しましょうって規格ですよね。 Wikiを見たらUTF-7、UTF8、UTF-16、UTF-32とあって、 更に5や9もあって、UTF-8にもBOM付きだの何だのとありました。 まるっきり統一するぞってやる気が感じられないのですが どうしてこんなに乱立しているのですか? 今後はノーマルのUTF-8(BOMなし)だけを意識すればいいのでしょうか。 以上2点のうち分かる方で結構ですので宜しくお願いします。

  • RubyでUTF8のコード値を文字に変換する方法

    UTF-8の文字コードのコード値が,以下のように\(バックスラッシュ)+8進数の表記×3バイト分で,記述されています。 (例えば,\343\201\202は「あ」を表す) "\343\201\202\343\201\204\343\201\206" (これは「あいう」) このようなコードの値を文字列にしたものを,実際のutf8の文字に変換するメソッドは無いのでしょうか? 例えば, "\343\201\202\343\201\204\343\201\206".method => "あいう" のようなmethodに相当するメソッドは無いのでしょうか?

専門家に質問してみよう