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

このQ&Aのポイント
  • ユニコードのサロゲートペア文字の内部コードについて調査しています。
  • Windows Vista以降では、JIS2004対応の文字コードとなり、ユニコード文字の中にカスケードペアの文字が存在することがわかっています。
  • カスケードペアは2バイトずつ4バイトで1文字を表現し、リトルエンディアンの場合にはどのような順番になるのか疑問です。
回答を見る
  • ベストアンサー

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

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

  • kttn
  • お礼率86% (19/22)

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

  • ベストアンサー
  • tabide
  • ベストアンサー率44% (148/331)
回答No.1

リトルエンディアンということは、UTF-16LE形式(Windowsでの内部形式はこれ)ですね。 実際にテキストエディタ上で入力して保存、バイナリエディタで開けて確認しました。 UTF-16LE: 40 D8 0B DC 参考までに、主な他の形式も掲げます。 UTF-16BE: D8 40 DC 0B UTF-8: F0 A0 80 8B

kttn
質問者

補足

 tabide様 早速の回答ありがとうございます。  UTF-16LEを前提としておりました。  2バイトずつのエンディアンということですね。 シフトJISで、1バイトずつで、漢字/ANKを識別していたわけですから、 ユニコードでは、2バイトずつで、サロゲートペアかどうかを識別するので、 当然、2バイトとなるのでしょうね。  ありがとうございました。

関連するQ&A

  • WindowsのUNICODEをJavaのStringに変換したい

    Windowsからソケット通信でUNICODE(little endian)文字列を受け取っています。 bufferはバイト配列で格納されているとして String text= new String(buffer);とか String text= = new String(buffer,"MS932");とか String text= new String(buffer,0,長さ,"UNICODE"); などとするのですが漢字コードが化けてしまいます。 エンディアン並びを逆にしたりしましたがやはり同じです。 半角の場合、例えば「abc」なら「 a b c」と 0x0の部分がスペースになっていました。 ところでWindowsがメモ帳などではき出すunicodeはjavaのunicodeとは違う と聞きましたがどうなんでしょうか? 宜しくお願いします。 ※バイト配列をそのまま返すとそれをWindowsクライアントは表示するので 通信部分でバイト配列が壊れている事は考えにくいです。

    • ベストアンサー
    • Java
  • メモ帳で保存した日本語テキストや日本語XMLをJavaで読込、保存。メモ帳での保存文字コードはなにが推奨されるでしょうか?

     Windows9x系ではないWindowsVistaやXP、NT、2000のメモ帳(Unicodeのbig endianは保存できるがおそらくUnicodeのbig endianでのBOMなし保存不可。UTF-8は保存できるがUTF-8でのBOMなし(UTF-8N)の保存不可。Unicodeのlittle endianは保存できるが仕様なので言うまでもないがUnicodeのlittle endianでのBOMなし保存不可。)で保存した日本語テキストや日本語XMLをJavaで読込、保存。メモ帳での保存文字コードはなにが推奨されるでしょうか? やはりJavaのString型に近いUnicode big endianがよいのでしょうか? それともJava側で自動認識してくれるのでしょうか? XMLの場合は1行目でそのXMLファイルが使用している文字コードが何か宣言しますよね。 でもテキストファイルだと文字コードを宣言する場所がないみたいですし・・・(ここでの文字コードを宣言する場所としてはBOMは例外ですよ 念のため) 補足:メモ帳だとUnicode big endianで保存すると必ずBOMが付くみたいです。 メモ帳はLF改行が使えません。CR+LF改行のみ対応です。

    • ベストアンサー
    • Java
  • 文字コード結果が違うのはなぜでしょうか?

    文字コード結果が違うのはなぜでしょうか? いつも参考にさせていただいております。ありがとうございます。 VBAにて、文字コード(16進表記)を取得したいのですが、 1.hex(ascw("あ")) 2.Dim ByteData() As Byte  ByteData = "あ" Debug.Print Hex(ByteData(0)) & Hex(ByteData(1)) の2通り行っているのですが、結果が違いました。 1.3042 2.4230 となってしまいます。 UNICODEのリトルエンディアン・ビックエンディアンの違いなのかとも思いましたが、 上記はどちらもVBAで行っているため、式によって扱いが違うとも考えられません。 この違いはなぜなのでしょうか? ご教授よろしくお願いいたします。

  • Unicode

    先日は文字コードについて色々助言してくださりありがとうございました。 おかげさまでJIS,EUC,SJISの変換はできましたが、 Unicodeについて詰まっているところがあります。 SJIS→UnicodeはSJISにあったU+XXXXに変換し、 それを1~4バイトにさらに変換して文字表記されることで出来ます。 後者の1~4バイトにさらに変換するやり方は出来ているのですが、 前者のSJISにあったU+XXXXに変換するところで詰まっています。 ##SJIS Unicode Name Note 0x00 U+0000 # <control> 0x01 U+0001 # <control> 0x02 U+0002 # <control> 0x03 U+0003 # <control> 0x04 U+0004 # <control> 0x05 U+0005 # <control> 0x06 U+0006 # <control> 0x07 U+0007 # <control> : : こういった変換表(テキストファイル)があるのですが、 どのようにしたらこのファイルをプログラム上で操作? できるのでしょうか? 例)SJISで0x07→U+0007→1~4バイト変換の 0x07→U+0007部分についてです。 また、逆に変換する際の0x07←U+0007についても わからないでいます。 何かヒントをください。

  • 文字コード体系について

    WINDOWS95の文字コードはシフトJISのみに対応していたと思うのですが、 このときアメリカなど海外で販売されていた WIN95の文字コードは何だったのかご存じありませんか? WINDOWSxpの文字コードはシフトJISと、unicode対応してると思うのですが、 海外で販売されている物は unicodeのみに対応してるのでしょうか。 それとも他に特殊な文字コード体系を持っているのでしょうか。

  • Unicodeで編集できるテキストエディタってありますか?

    これまで「Unicode対応」を謳ったエディタの多くは 「Unicodeテキストの読み書きが出来る」エディタに過ぎませんでした。 つまりファイルを読み込むときにUnicode→シフトJISに変換し、編集は シフトJIS環境で行う……という。 保存も同様でシフトJIS→Unicode変換したのち保存します。 これだと確かにUnicodeテキストの読み書きは出来ますが、 Unicode最大に特徴であるJIS外文字のが入っているとシフトJIS変換時に 「?」になってしまいます。 編集もUnicode環境で行えて、Unicodeフォントを指定してやればJIS外文字も 表示できる、そんなフリーエディタってありませんか? 最近の「秀丸」で出来るようになったのは知ってるんですが……

  • サロゲートペアとは?

     サロゲートペアは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」なんでしょうか? ​​

  • 文字について UNICODE

    全くの初心者で恐縮です。 WEB環境で、画面入力した漢字をOracleDBに更新する。または、その逆を実施しようとしています。 が、問題がありまして、 端末で使用している文字が独自文字(2バイト系UNICODE準拠)なのです。 端末はWINXPです。OS内ではS-JISですよね。 そこで、画面の入出力やDB更新時に文字化けや 強制変換が発生するか不安なのですが。 JAVAは、独自文字でも大丈夫なのでしょうか。 とてもアバウトな質問ですみません。 もしかしたらJAVAだけの話では無いのでしょうか。 どなたか、そこら辺も含めて教えていただけますでしょうか。 宜しくお願いします。

    • ベストアンサー
    • Java
  • visual studio2010 文字コード

    visual studio2010を使っています。Cのプログラムを書いてます。 文字セットを選ぶ箇所で ・マルチバイト文字セットを使用する ・Unicode文字セットを使用する という2つの選択肢がありますが、 上を選ぶとshift-jisの文字コードが選ばれると認識してます。 それで、下のUnicode文字セットを使用するを選んだ場合なんですが、 これはutf-16のことですか? utf-8が主流だと思っていたのでここでさすUnicodeが勝手に utf-8のことだと思ってたんですが、 visual studioで扱っている方はワイド文字で、 utf-8について調べたらASCIIにも対応できる可変長のマルチバイト という風に書いてあったので、あれ?と思い色々調べたら ウィンドウズではメモ帳などでUnicodeという表記でutf-16を指すみたいなので これも同じでutf-16なのかなと思いました。 ただ、visual studioで扱うUnicodeはワイド文字ということと、 utf-16は2バイト固定ではなく2バイト単位なだけで 4バイトで1文字を表すこともあることが書いてあったので、 これはワイド文字とは違う??と混乱してます。 それともワイド文字は2バイト固定と思ってたんですが wchar_tが2バイトずつなだけでワイド文字は1文字2バイトというわけではない ということでしょうか? それとwchar_tで2個分で1文字を表したりする使い方はするんでしょうか? まとまりのない質問になってしまいましたがよろしくおねがいします。

  • 文字コードの利点・欠点について

    おはようございます。 文字コードには、大きく分けて4種類 ・JISコード ・S-JIS ・EUC ・Unicode がありますが、それぞれの利点・欠点を教えていただけますでしょうか。 あと、EUCはなぜ制御文字を使って、1バイト仮名や補助漢字の文字コードを割り当てているのかも教えてください。 よろしくお願いします。