文字コードについての疑問:漢字コード表とプログラムでの表示の違い

このQ&Aのポイント
  • 文字コードに関して初歩的な疑問があります。漢字コード表では「毎」は「6BCE」(UTF-16)と表示されていますが、実際のプログラムで表示すると「CE6B」となります。
  • 漢字コード表を参照する際、右バイトから見る決まりがあるのでしょうか?具体的にはVB.NETのコードを実行すると「毎」のバイト配列が「CE6B」となります。
  • この違いについて教えていただきたいです。具体的なプログラムの実行結果も示します。
回答を見る
  • ベストアンサー

文字コードについて

非常に初歩的なことですが教えてください。 漢字コード表等でみると「毎」は「6BCE」(UTF-16)表記されていますが実際のプログラム等で中身を見てみると「CE6B」となります。 これは漢字コード表を見る際には右バイトから見る決まりがあるという事でしょうか? 例えば以下の様なコードを実行すると -----以下はVB.NETのコード Dim str As String = "毎" Dim bytesData As Byte() 'UTF-8として変換 bytesData = System.Text.Encoding.Unicode.GetBytes(str) 'バイト配列を16進にて1バイト目から表示 Debug.Write(Hex(bytesData(0)) & Hex(bytesData(1))) ----- 結果は以下の様な内容になります。 CE6B

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

  • ベストアンサー
回答No.1

16bitの値を8bit単位で保存する方法には,2種類の方法があります。 ・Bit-Endian 上位8bit, 下位8bitの順で保存する方法 ・Little Endian 下位8bit, 上位8bitの順で保存する方法 Encoding.UnicodeはUTF-16LE,つまりはLittle Endian用のEncodingになります。 UTF-16BEで使うには,Encoding.BigEndignUnicodeを使います。 MSDN: Encoding.BigEndianUnicode プロパティ (System.Text) http://msdn.microsoft.com/ja-jp/library/system.text.encoding.bigendianunicode.aspx ちなみに,x86/x64 CPUはLittle Endianになっています。

osiete-q
質問者

お礼

さっそくご回答有難う御座います。 そういう決まりという事ですね。 すっきりしました。

関連するQ&A

  • SJIS->UTF8->SJISコード変換について

    Windows XPでVB.NET2010で文字コード変換のプログラムを下記のように作成しました。 Dim beforeStr As String = "変換前" Dim utfEnc = System.Text.Encoding.GetEncoding(65001) Dim sjisEnc = System.Text.Encoding.GetEncoding(932) Dim beforeBytes() As Byte = utfEnc.GetBytes(beforeStr) Dim afterBytes() As Byte = System.Text.Encoding.Convert(sjisEnc, utfEnc, beforeBytes) Dim afterStr As String = sjisEnc.GetString(afterBytes) TextBox3.Text = afterStr Dim reverseStr As String = afterStr Dim reverseBytes() As Byte = sjisEnc.GetBytes(reverseStr) Dim baseBytes() As Byte = System.Text.Encoding.Convert(utfEnc, sjisEnc, reverseBytes) TextBox4.Text = utfEnc.GetString(baseBytes) SJIS->UTF8に変換して、確認のためにUTF8->SJISに逆変換してみましたが、 「変換」までは正しいのですが、最後の「前」が文字化けしてしまします。 正しくSJIS-.UTF8->SJISするには、どのように修正すればよろしいでしょうか? よろしくお願いします。

  • JAVA 文字コード変換

    こんにちは。 JAVAの文字コード変換のところで教えて頂きたい所があります。 はしご高(髙)  の文字をUTF-8からJISコードに変換してテキストファイルに書き込んでいるのですが、文字化けして"?"という文字になっています。 "髙"の文字をUTF-8からJISコードに変換の仕方のコーディング方法を教えて頂けないでしょうか。 現在下記の様に変換を行って書き込んでいます。  String str = "髙";  byte[] buf = str.substring(0, 1).getBytes("JIS0208"); OS:WindowsXP DB:Oracle10g  宜しくお願い致しますm(__)m

    • ベストアンサー
    • 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で行っているため、式によって扱いが違うとも考えられません。 この違いはなぜなのでしょうか? ご教授よろしくお願いいたします。

  • vb2008で文字列から文字列コードを取得する方法

    サイトHTMLをWebBrowserを使用せずに取得するために、 Dim stream As System.IO.Stream = client.OpenRead(tbItemURL.Text) Dim reader As New System.IO.StreamReader(stream) Dim strHtml = reader.ReadToEnd() reader.Close() stream.Close() のような形で文字列を取得しています。 しかし、この場合Sift-jis等の場合、後の作業(一部データ取得)で文字化けに悩まされます。 http://dobon.net/vb/dotnet/string/detectcode.html 上記サイトで「バイト配列」に格納して判別する方法があります。 そこで、文字列をバイト配列に格納しようとしますが…。 文字列→バイト配列には文字コードが必要となります。 Dim data() As Byte = Encoding.UTF8.GetBytes(text) なんだか鶏と卵のような感じになってしまいます。 文字列から文字コードを判別する方法はないでしょうか? よろしくお願いします。

  • javaの文字コードについて

    いつもお世話になっております。 webで入れられた文字列に全角が含まれるか判定したいのですが、 文字コードについて質問させてください。 javaは標準では、String型は標準ではunicodeだと思うのですが、 これはutf-8なのでしょうか。utf-16なのでしょうか。 試しに以下のように"A"の文字をbyteに変換してみたところ、 String strTest = "A"; byte[] bbb = strTest.getBytes(); for(int i = 0 ; i < bbb.length ; i++){ System.out.println(bbb[i]); } "65"という結果が返ってきました。 http://ash.jp/code/unitbl1.htm 等文字コード表を見ると、"A"は"41"と定義されており、なぜ"65"が返ってくるのでしょうか。 変な質問ですいません。 関係無いと思いますが、ソースはS-JIS、windwos環境で実行しています。 よろしくお願いします。

    • ベストアンサー
    • Java
  • C# 文字コード変換

    お世話になります C#でプログラムを開発しております その際、ハードウェアへデータを送信するのですが 送信する文字列データをANKコードで送信しなければなりません。 そこで行き詰っているのですが ハードウェアへ ひらがなの 「あ」 を送信する際 「$"」 へ変換して送信する形です ・・・参考・・・ JIS0208コード表 http://ash.jp/code/codetbl2.htm ANKコード表 http://www.asahi-net.or.jp/~ax2s-kmtn/ref/codes. … 以下がプログラムです      str = "あ";      byte[] data = Encoding.GetEncoding("EUC-JP").GetBytes(str);      ret = Encoding.GetEncoding("ASCII").GetString(data);      System.Console.WriteLine("ret:" + ret); 上記のコードでできると思ったのですが ret2:?? となってしまいます。 Javaではできたのですが・・・ いちおう成功したJavaのコードを載せます      str = "あ";      byte[] jis = str.getBytes("jis0208");      String strAscii = new String(jis, "ASCII");      System.out.println("strAscii:" + strAscii); 結果 $" Javaではjis0208でエンコードしてるところを C#ではEUC-JPで行っているのが原因だとは思うのですが ネットで調べてもjis0208はEUC-JPでエンコードするようにあります 私の理解が不足しているのでしょうか お分かりになる方、宜しくお願い致します。

  • .NET 文字コードの変換

    VB2008で文字列を他の文字コードにする方法が知りたいです。 何かしての部分がわかりません。 VB2005でも使えるものだったらうれしいです。 Dim str_sjis as string Dim str_euc as string = "パソコン" '例えばEUC-JP '''何かして str_sjisにシフトJISで文字列が入っている。 .Netの文字コードの変換の仕方がごちゃごちゃして分かりづらいです。

  • ASP.NET SJIS→UTF-8文字コード変換。

    ASP.NETをVBで開発しています。 無償の ASP.NET ホスティング 「WebMatrixHosting Japan」で実行しています。 表題の件ですが、シフトJISのHTMLページから UTF-8のASPXページへPOSTした時に、文字化けすることで困っています。 シフトJISの値をUTF-8に変換できる方法をご存知の方、教えてください。お願いします。 ASCII文字は問題なく実行できます。 以下検証中のコードです ファイル名:SJIS.htm <form action="UTF-8.aspx"> <input type="text" name="username"> <input type="submit"> </form> ファイル名:UTF-8.aspx Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load IF request.form("username") <> "" THEN DIM strIn AS String = request.form("username") Dim bytesData As Byte() = System.Text.Encoding.GetEncoding("shift_jis").GetBytes(strIn) Dim outPut As String = System.Text.Encoding.GetEncoding("UTF-8").GetString(bytesData) Literal1.Text = outPut END IF End Sub

  • urlエンコード後の文字コードは何?

    $str = "%E3%82%84%E3%81%BE+%E3%81%8B%E3%82%8F"; $str =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("C", hex($1))/eg; こうやってurlエンコードすると、以下のようになります。 「やま+かわ」 1.この「やま+かわ」というのは文字コードは何なんでしょうか? 2.Jcode.pmなどのライブラリを使わずに、utf-8で統一したCGIを書きたいのですが、この文字列をどうすればいいでしょうか。コツを教えてください。 3.あと、+を半角スペースに置換する以外に なにか特別なルールはありますか? 4.参考になるWebページがあれば教えてください。

    • ベストアンサー
    • Perl
  • Stringオブジェクトの文字コードの変換

    NewString = new String(b.getBytes("iso-8859-1"),"Shift_JIS"); でShift-Jisに変換できるとありましたが、どうも出力の 日本語部分が3Fになってしまってうまくいきません。 テスト用に以下のコードを作ってみました。 import java.io.File; import java.io.FileWriter; import java.io.BufferedWriter; import java.io.IOException; import java.io.FileOutputStream; public class Test { public static void main(String[] args) { try{ String regex_title; regex_title = "制限をしている場合"; System.out.println(getHexString(regex_title.getBytes())); System.out.println(getHexString(regex_title.getBytes("iso-8859-1"))); regex_title = "制限をしている場合"; regex_title = getUTF8(regex_title); System.out.println(getHexString(regex_title.getBytes())); System.out.println(getHexString(regex_title.getBytes("iso-8859-1"))); regex_title = "制限をしている場合"; regex_title = getShiftJIS(regex_title); System.out.println(getHexString(regex_title.getBytes())); System.out.println(getHexString(regex_title.getBytes("iso-8859-1"))); FileOutputStream fs = new FileOutputStream("./test.txt"); fs.write(regex_title.getBytes()); fs.close(); }catch(Exception ex){ } } public static String getHexString(byte[] b){ String buff=""; try{ for(int i=0;i<b.length;i++) buff += String.format("\\x%02x", b[i]); }catch(Exception ex){ } return buff; } public static String getUTF8(String b){ try { //UTF-8へ変換 return new String(b.getBytes(), "UTF-8"); } catch (Exception e) { e.printStackTrace(); return b; } } public static String getShiftJIS(String b){ try { //UTF-8へ変換 return new String(b.getBytes(),"Shift_JIS"); } catch (Exception e) { e.printStackTrace(); return b; } } // @Override } //////////////////////////////////////////////////////////// 1. System.out.println(getHexString(regex_title.getBytes("iso-8859-1"))); の部分の出力をみると3Fに変換されています。 regex_title.getBytes("iso-8859-1")の時点で3Fな事がわかります。 何故でしょうか? 私がやりたい事はStringの内部のコードをUTF8にする事です。 NewString = new String(b.getBytes("iso-8859-1"),"UTF-8"); では、出来ていないようでした。 2. また、以下のコードを実行するとtest.txt test2.txtともに 文字コードがShiftJisで出力されるのはなぜでしょうか? 変換を行わなければ内部処理形式のUnicodeで出力されるの ではないのでしょうか? regex_title = "制限をしている場合"; FileOutputStream fs = new FileOutputStream("./test.txt"); fs.write(regex_title.getBytes()); fs.close(); File file = new File("./test2.txt"); BufferedWriter bw = new BufferedWriter(new FileWriter(file)); bw.write(regex_title); bw.close(); 上はgetBytes()が変換してるのでしょうか? 下はBufferedWriterかFileWriterが変換してる? ではString内部のByteをそのまま出力するにはどうしたら・・・。

    • ベストアンサー
    • Java

専門家に質問してみよう