C#文字コードの取得&変換

このQ&Aのポイント
  • C#で文字コードを調べるプログラムを作成しています。UNICODEの文字コードをリトルエディアンで出力する方法について教えてください。
  • C#で文字コードを調べるプログラムを作成しています。文字コードから人間が読める文字に変換する方法について教えてください。
  • C#で文字コードを調べるプログラムを作成しています。調べたい文字コードをビッグエディアンで出力する方法について教えてください。
回答を見る
  • ベストアンサー

「C#」文字コードの取得&文字変換

C#で文字コードを調べるプログラムを作成しています。 そこで2つ質問をさせてください。 1つ目(文字コード調べ) TextBoxに漢字を入力して,各エンコーディングの文字コードを調べるときに,UNICDEの場合, Encoding enc_default = Encoding.GetEncoding(932); string input = tb_input.Text; byte[] byte_input = enc_default.GetBytes(input); string outtext_unicode = ""; Encoding enc_unicode = Encoding.Unicode; byte[] byte_unicode = Encoding.Convert(enc_default,enc_unicode, byte_input); foreach (byte b in byte_unicode) { outtext_unicode += string.Format("{0:X}", (int)b); } tb_output_unicode.Text = outtext_unicode; とすると,調べたい文字コードがLE(リトルエディアン)で出力されます。これをBE(ビッグエディアン)で出力されるにはどうしたらよいでしょうか? ご存知の方がいらっしゃいましたら,ぜひ教えてください。 よろしくお願いいたします。 2つ目(文字コードから文字を取得する) 上記の質問と逆のパターンで,TextBoxに文字コードを入力してもらい,人間が読める文字に変換する場合下記のようなコードを書くと, string codePoint_string = tb_output_unicode.Text; int codePoint = int.Parse(codePoint_string); char c = (char)codePoint; tb_input.Text = Convert.ToString(c); ASCIIの文字コードを入力した場合には,きちんと変換してくれるのですが,漢字の文字コードを入力すると,FormatExceptionが発生します。 何か勘違いをしているのかもしれませんが,いまいちやり方が創造できません。 こちらも,ご存知の方がいらっしゃいましたら,ご教示願います。

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

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

フォームデザイナで, Form1に対し,TextBox1とButton1を貼り付け,以下のコードを入力。 ============================= Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim codePoint_string As String = TextBox1.Text Dim codePoint As Integer = Integer.Parse(codePoint_string) Me.Text = Char.ConvertFromUtf32(codePoint) End Sub End Class '========================= その後 http://homepage3.nifty.com/jgrammar/ja/tools/codeval0.htm を利用して 文字「あ」がUTF-32で00003042=12354であることを確認後 TextBox1に12354を入力してButtonをクリックしたら Form1に「あ」が表示された。・・・けどUTF-16だから違うんだよね? http://msdn2.microsoft.com/en-us/library/wdh8k14a(VS.80).aspx とか http://msdn2.microsoft.com/en-us/library/z2ys180b(VS.80).aspx とか使うのかもしれないけど良く解らん。

maniacpapa
質問者

お礼

「あ~」と思わず叫んでしまいました。 そうですよね。 00003042=12354 ですよね。思い違いをしてました。FA11とか指定して,普通にInt.Parseしてました。 C#なので, string codePoint_string = tb_output_unicode.Text; int codePoint = Convert.ToInt16(codePoint_string, 16); char c = (char)codePoint; tb_input.Text = Convert.ToString(c); で,文字を取り出せました。 本当にありがとうございます。上の回答とあわせて本当に感謝感激です。

その他の回答 (1)

回答No.1

俺はVB.NET系のユーザだ。 ファイルやらビットやらは苦手で、殆ど検証していない。 なので勘だ。 (1) System.Text.Encoding.Unicodeプロパティではなく http://msdn2.microsoft.com/en-us/library/system.text.encoding.unicode.aspx System.Text.Encoding.BigEndianUnicodeプロパティを使うとどうなるか教えて欲しい http://msdn2.microsoft.com/en-us/library/system.text.encoding.bigendianunicode.aspx

maniacpapa
質問者

お礼

早速のアドバイスありがとうございます。 Encoding.BigEndianUnicode で,満足できました。 見落としてました。本当に助かりました。

関連するQ&A

  • C# 文字コード変換

    お世話になります。 宜しくお願いします。 C#でプログラムを開発しております。 その中で、文字列をShift-JISでテキストファイルへ書き出す という処理があるんですが 以下のように指定しても文字コードがUTF-8で書き出されているようです。 コードを調べましたが間違いが見つけられません。 どこか間違いはございますでしょうか。 ご教授宜しくお願いします。 ・文字コードを判別する場所 : http://encode-detector.uic.jp/tool ・テキストの形式 :ファイル名.DMD /////////////// 以下コード /////////////////////////     String param = "テキストへ書き込む内容";     System.IO.StreamWriter sw =          new System.IO.StreamWriter(             @"C:\hoge.DMD",              false,             System.Text.Encoding.GetEncoding("Shift_JIS") );     System.Text.Encoding src = System.Text.Encoding.UTF8;     System.Text.Encoding dest = System.Text.Encoding.GetEncoding("Shift_JIS");     byte[] temp = src.GetBytes(param);     byte[] sjis_temp = System.Text.Encoding.Convert(src, dest, temp);     param = dest.GetString(sjis_temp);     sw.Write(param);     sw.Close();

  • 文字コード変換

    PHP4.4を使っています。 プログラム中の文字列変数値「標の鷹」から、 http://xxx.cgi?prm=%95W%82%CC%91%E9 という文字列(リンク)を生成したいのですが、 http://xxx.cgi?prm=�W�̑� のようになってしまいます。 ソースは以下の通りです。 $img_url = "http://xxx.cgi?prm=".$row[0]; mb_detect_order("ASCII, JIS, UTF-8, eucJP-win, EUC-JP, SJIS-win, SJIS"); $enc = mb_detect_encoding($row[0]); // この時点で$row[0]=「標の鷹」 if ( ($enc != "ASCII") && ($enc != "JIS") && ($enc != "UTF-8") && ($enc != "eucJP-win") && ($enc != "EUC-JP") && ($enc != "SJIS-win") && ($enc != "SJIS") ) {   echo "未知の文字コードが入力されました。<br />\n";   exit; } $url = mb_convert_encoding($url,"SJIS",$enc); echo "url = ".$img_url."; ※ちなみに、このコードが書いてあるphpファイルはutf8です。

    • ベストアンサー
    • PHP
  • 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するには、どのように修正すればよろしいでしょうか? よろしくお願いします。

  • SJISからUTFに変換してのDB登録がある文字だけうまくいかない。

    PHPとPostgresでデータベース構築中の初心者です。宜しく御願いします。 今現在なんとかSJIS(windows)からUTF(linux)へ文字コードを変換してDBへデータを入力できるようになり、テスト中なのですが、問題が発生しました。 データがある文字で終わる場合のみデータ追加ができない、という問題です。 今分かっているのは、「表」という文字です。 しかも、文字列の最後に来た場合のみエラー(SQLでINSERTできない)がでます。 例えば、「方針発表」と入力した場合、エラーですが、 「方針発表出席」と入力すればデータ追加可能です。 いろいろ調べている途中ですが原因、解決策ともにまだ不明です。 どなたか御教授願います。 ちなみに、文字コード変換は次の関数cnvで行っております。 function cnv($string, $enc){ $det_enc = mb_detect_encoding($string, "UTF8, SJIS"); if ($det_enc and $det_enc != $enc){ return mb_convert_encoding($string, $enc, $det_enc); }else{ return $string; }}

    • ベストアンサー
    • PHP
  • 携帯の文字化け

    パソコンで入力したお知らせをパソコンと携帯で確認できるようにしたものを、サーバーを移管したところ、携帯で見る方だけ文字化けをおこすようになりました。 <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> です。 // 表示文字コード define("ENCDISP", "shift_jis"); // データベース文字コード define("ENCDB", "EUC-JP"); // ========================================================= // 表示する文字コードに変換 // ========================================================= function cnv_dispstr($string) { // 文字コードを変換する $det_enc = mb_detect_encoding($string, "EUC-JP, SJIS"); if ($det_enc and $det_enc != ENCDISP) { return mb_convert_encoding($string, ENCDISP, $det_enc); } else { return $string; } } ちなみにこういうのを入れてみてもだめでした。 すいませんが教えてください。

    • 締切済み
    • PHP
  • MySQL文字コード

    DB情報をHTMLで表示する場合に、mb_convert_encoding()で指定する文字コード MySQL5.1 PHP5 HTML - shift_jis MySQL の文字セット UTF-8 Unicode (utf8) MySQL の接続照合順序: ujis_japanese_ci フィールドの照合順序 ujis_japanese_ci PHPプログラムでDB情報取得後にSJISに変換 mb_convert_encoding($String, "SJIS", "●●●"); ●●●の文字コードを何を指定すればいいのかがわかりません。 EUCを書くとうまくいってるような気もしますが、なぜEUCでうまくいく のかもわかりません。 ご教授下さい。

    • 締切済み
    • PHP
  • 文字化けについて

    お世話になります 携帯サイトの文字化けに困っています。 MysqlのデータはEUC-JPなので 携帯サイトにデータを出力するのにShift-JSにしないと文字化けするというところまで調べました。 function cnv_dispstr($string) { // 文字コードを変換する $det_enc = mb_detect_encoding($string, "Shift-JIS,EUC-JP"); if ($det_enc and $det_enc != ENCDB) { return mb_convert_encoding($string, ENCDB, $det_enc); } else { return $string; } } このようにしたのですが、 Mysqlから出力したデータ部分の文字化けが解決しません。 アドバイスよろしくお願いします。

    • ベストアンサー
    • PHP
  • Webプログラミングについて

    Webプログラミング初心者です. PHP 文字化けについて質問です データベースをつかった簡単なリンク(検索)を作ろうとおもったのですが, function cnv_sqlstr($string){ $det_enc=mb_detect_encoding($string,"SJIS,utf8,EUC-JP"); if($det_enc and $det_enc != ENCDB){ $string=mb_convert_encoding($string,ENCDB,$det_enc); } $string=addslashes($string); return $string; } function cnv_dispstr($string){ $det_enc=mb_detect_encoding($string,"SJIS,utf8,EUC-JP"); if($det_enc and $det_enc != ENCDISP){ return mb_convert_encoding($string,ENCDISP,$det_enc); } else { return $string; } } このような感じで文字の変換を行ったつもりなのですが,日本語の文字が化けてしまいます...>< ENCDB,ENCDISPは共に定数化してあり,utf8としてあります. データベースの方は(Xamppを使用)照合順序の部分はutf8_unicode_ciとなっています. どうして文字化けが直らないんでしょうか??教えて下さい><

    • ベストアンサー
    • PHP
  • 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でエンコードするようにあります 私の理解が不足しているのでしょうか お分かりになる方、宜しくお願い致します。

  • 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

専門家に質問してみよう