サロゲートペアとは?

このQ&Aのポイント
  • サロゲートペアはユニコードの第1面以降のコードポイントを指定する方法です。
  • IMEパッドで出てくるコードポイントは「𠀋」ならU+2000Bというように5文字表示されます。
  • サロゲートペアの変換方法は、1番左の桁を「2」から「1」に変換し、上位サロゲートと下位サロゲートに分けることです。
回答を見る
  • ベストアンサー

サロゲートペアとは?

 サロゲートペアは4ケタの16進数を2個、つまり16進数8文字で ユニコードの第1面以降のコードポイントを指定するはずなのに IMEパッドで出てくるコードポイントは「𠀋」ならU+2000Bというよ うに5文字。マウスポインタをあてると「D840 DC0B」と出る。 この5文字から8文字への変換は、 1番左の桁を"2"から"1"にする。これをXとする。 (2)Xを0x400で割ってその商を0xD800に足す。これを「上位サロゲート」とする。 (3)Xを0x400で割ってその剰余を0xDC00に足す。これを「下位サロゲート」とする。 と、ウェブに書いてありました。 しかし、5文字の1番左は必ず「5」なんでしょうか? ​​

  • akmyu
  • お礼率18% (81/443)

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

  • ベストアンサー
  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.2

UTF-16 において、Unicode 第2面・追加漢字面を表現するには、以下の計算式を使います。 上位サロゲート = 0xD800 + (code-0x10000 >> 10) 下位サロゲート = 0xDC00 + (code-0x10000 & 0x3FF) この 0x10000 の減算ですが、コードの効率化のために行います。 サロゲートペアで表現できる文字コード範囲は 上位サロゲート10bit+下位サロゲート10bit = 20bit -> 16面分 もし減算しないならば、サロゲートペアで表現できる範囲は 第0-15面 ですが、 そもそも 第0面 はサロゲートペアを使うまでもないので、 除算することにより 第1-16面 を表現できるようにしています。 これにより UTF-16 で表現できる文字コード範囲は 2^16(第0面) - 2^11(サロゲートペア分) + 2^16*16(第1-16面) = 1,112,064 減算しない場合より 1面分だけお得となっております。 ご質問の > 1番左の桁を"2"から"1"にする。これをXとする。 は、要するに「0x10000で減算する」を回りくどく説明しているだけなので、 > しかし、5文字の1番左は必ず「5」なんでしょうか? 少々ずれた回答になりますが、必ず「0x10000」です。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

>しかし、5文字の1番左は必ず「5」なんでしょうか? ​​は、 >しかし、5文字の1番左は必ず「2」なんでしょうか? の間違いですかね? ​​ あなたが読んだページは、5桁目が2の場合について書いてあったのでしょう。 一般的には、0x10000を引いてください。

akmyu
質問者

補足

すみません「5」ではなく「2」の間違いでした。

関連するQ&A

  • ユニコードのサロゲートペア文字の内部コードについて

     Windows Vista から、文字コードがJIS2004対応となり、ユニコード文字の中に、カスケードペアの文字が存在すると聞き及んでいますが、当方は、まだ XP のままで、また、JIS2004対応のMSフォントもインストールしておりません。  1点お教えください。  カスケードペアは、xD800~xDBFF 及び、xDC00~xDFFF の2バイトずつ、4バイトで1文字を表現するそうですが、 たとえば、ユニコードx2000B(丈の右上に犬のように点が付いた文字)の場合、計算すると、xD840 + xDC0B であらわせるようですが、リトルエンディアンでは、   x40D80BDC となるのでしょうか。  それとも、   x0BDC40D8 となるのでしょうか。 上段になるような気がするのですが、根拠がはっきりしません。  宜しくお願い致します。

  • access2000 での jis2004準拠 MS明朝&ゴシックフォントについて

    WindowsXP SP-3 で、access2000 sp-3 を使用しています。 jis2004準拠のMS明朝を使う必要が生じ、 調べた結果、 Microsoft MS ゴシックおよび MS 明朝 JIS2004 対応フォント (KB927489) をダウンロードし、 office 製品は、office 2003/2007 が対応しているとのことで、 access2007 の購入を考えています。 access2007 購入前に、エディターの16進入力で、 UTF-16LEのテキストデータを作成し、access2000にインポートしましたら、 テーブルにサロゲートペアの文字が表示され テーブルからプリンター出力するとその文字が印字されました。 たとえば、丈の右肩に犬のように点の付いた文字。 Unicode:2000B(サロゲトペアでは、xD840 + xDC0B) これは、access2000も、jis2004に対応いていると考えてよいのでしょうか。 microsoftは、保証の限りではないということでしょうが。 何か経験されている方・ご存知の方、お教え下さい。

  • 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】となり 互換性がなくなるのではとおもったのですが・・・。 これはどういう意味の互換性なのでしょうか? 識者の方ご教授ください。 お願い致します。

  • 文字リテラルについて

    javaの文字リテラルについて教えていただきたいのですが \u1234の様にunicodeの16進数(2バイト) を使用すると思いますが、\uのあとの桁数は、必ず4桁なのでしょうか?1桁もしくは2、3桁もありえますでしょうか? unicodeの16進数について理解していないのでよろしくお願いいたします。

    • ベストアンサー
    • Java
  • サロゲートペアの文字コード→文字変換

    サロゲートペアの文字コード→文字変換 Windows上でRubyを使って文字コードの書かれたファイルを読み込んで文字を出力しようとしています。 サロゲートペアの文字コードを文字に変換するにはどうしたらいいでしょうか? たとえば上位サロゲートがa、下位サロゲートがbであるとき、JavaScriptでは次のようにすれば文字が得られるようです。 var s; s = String.fromCharCode(a,b); alert(s); (参考:http://codezine.jp/article/detail/1592) これをRubyでやろうとしていていろいろ調べてみたのですが、探し方が悪いのかわかりません。 どう書けばよいのか教えてください。 なお、WinsowsはXPです。ファイルに出力して正しく出力されているかどうかを確認しています。 よろしくお願いします。

    • ベストアンサー
    • Ruby
  • 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

  • 文字コードANSIからUnicodeにしてください

    今日はじめたばかりの初心者です。 メモ帳でソースを作ってるのですが、 コードの文字数が多くなると、文字コードANSIからUnicodeにしてくださいとメモ帳から言われ、 Unicodeに変更して、保存すると、 http://localhost/tset.php でコードを確認すると、文字化けはしないのですが、おかしくなります。 だからって文字コードANSIにしていると、毎回Unicodeにしますか?と聞かれます。 こういう場合どうすればいいでしょうか? 他のテキストエディタハワードしか使ったことがないです。

    • ベストアンサー
    • PHP
  • 文字式について

    各数の数がすべてbである4けたの自然数を37でわったときの商と余りを用いて表せという問題なんですが 各数がすべてbである4けたの自然数は  1000b+100b+10b+b ですよね?? この先がわかりません。 教えてください!!

  • 文字コードの問題

    C言語の問題で次のようなものがあるのですが、 考えてもどんなコードになるのかどうしてもわかりません。 どなたかお分かりになる方はいらっしゃいませんでしょうか? お願いいたします。 ~問題~ 2桁の16進数('41~49','50~'59')を入力すると対応する文字を表示する。 ただし%xは使用しないこと。 なお、入力に間違いはないものとする。 (ヒント:入力は一つの数値か、二つの文字か?) 実行結果 2桁の16進数('41~49','50~'59')を入力してください:53 文字コード「53」の文字は「S」です。

  • SWFにサロゲートペアを埋め込む方法

    Flex初心者です。 現在、Flex3.5aを使って、サロゲートペアを含め日本語漢字を埋め込んだ SWFファイルを作成しようとしていますが、なかなかうまくいきません。 ご存知の方、ご指導いただけますでしょうか。 Ver3.5aではサポートしていない等のご返答でも構いません。 宜しくお願いたします。 以下のサロゲートペアとなる文字のUTF-16を指定して、SWFファイルをコンパイルしようとするとエラーになります。 "𠮟"(U+20B9F) 「エラーメッセージ: エラー: Unicode の範囲 '20B9F' が無効です」 上位/下位のサロゲートペアコードに分割「U+D842,U+DF9F」して、unicodeRangeに指定した場合、 SWFファイルは作成されますが、サロゲートペアとなる文字が埋め込まれていませんでした。 -- ASファイル抜粋 [Embed( source='<<ttcファイルの指定>>', fontStyle="normal", fontWeight="normal", unicodeRange="<<埋め込みたい文字コード(UTF-16)を指定>>" )] -- 環境 Flex3.5a Windows7 ttcファイル:明瞭(Ver6.02), MSゴシック(Ver.2.50) , MS明朝(Ver.2.50)

    • ベストアンサー
    • Flash