トップ回答者
ある文字の文字コードを知るにはどのようにしたらよいでしょうか?

質問
回答
-
> 表示には、もしその絵文字を再現するのであれば、絵文字のフォントが必要とか、
> いろいろありますが、とりあえずそれを(うりぼう)と置き換えればいいかなと思
> っています。「うりぼう」というのが具体的に何だか分かりませんが、特定の文字や記号に置き
換えるだけでよければ、以下のスレッドが参考になりませんか?携帯からの投稿で絵文字の入力を制限するためには
http://social.msdn.microsoft.com/Forums/ja-JP/aspnetja/thread/1d7459b1-5dd2-4cc6-9b9f-df46aebd0d62au の絵文字は Unicode では E468-E5DF, EA80-EB88 になるそうですので、上記の
ページにアップしたサンプルコードで pattern を以下のように置き換え、string pattern = @"[\uE63E-\uE6A5]|[\uE6AC-\uE6AE]|[\uE6B1-\uE6BA]|[\uE6CE-\uE757]";
↓
string pattern = @"[\uE468-\uE5DF]|[\uEA80-\uEB88]";マッチした文字を String.Empty ではなくて、以下のように特定の記号(例えばゲ
タなら "〓")に置き換えれば可能だと思います。string outputStr = rgx.Replace(text, "");
↓
string outputStr = rgx.Replace(text, "〓");なお、au の絵文字については実際に検証していませんので保証の限りではありませ
ん(i-mode 絵文字では検証した限り OK でしたが)。ご自分で十分検証してくださ
いね。- 回答としてマーク d-kot 2011年4月3日 13:09
すべての返信
-
淲はJISコードで7A67であり、以下のページでタイプDの表からそれに相当する絵文字を探せば、「うりぼう」かな?
絵文字
http://www.au.kddi.com/ezfactory/tec/spec/3.html
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/ -
Azuleanさん、おっしゃるとおりです。
わたしもなにが知りたいのかよくわかっていなくて、質問しながら頭のなかを整理しようとしています。
ゴールとしては、ezwebから送られてきたメールを受信して表示したい、ということになります。
いま受信できていて、ただその該当の絵文字部分が文字化けして別の文字になっています。
別の文字になる前の文字コードを知り、プログラム上で文字化けしている部分を特定し、必要なら保存時(表示)時の文字コードを変更する、などの処理が必要かと考えています。
表示には、もしその絵文字を再現するのであれば、絵文字のフォントが必要とか、いろいろありますが、とりあえずそれを(うりぼう)と置き換えればいいかなと思っています。保存はWindowsXPで
File.AppendAllText(saveFileName, contents, Encoding.Default);
としているので、ShiftJISでしていると思います。受信したメールはC#のプログラム上では、Unicodeとして扱っていると思います。
メールはたしかJISコードで送られてきているのではなかったかと思います。エンコードを指定しない場合は。
そうすると、JIS→Unicode→SJISと変換をしていて、どこでどうなっているんだろうかと。
で、場所は特定できたみたいなのだけど、文字コードがわからなくて、その文字をコード表で見ると、台湾の文字コードのなかに見つけられたのですが、さてどうなってるんだみたいな感じで、途方にくれている状況です。
こう書いてみて、まだ自分が途方にくれていることはわかりました。trapemiyaさん、ありがとうございます。
おっしゃるとおり該当する文字は「うりぼう」です。
JISコードでは7A67なんですね!
そのあたりを手がかりしてみます。
感謝です! -
> 表示には、もしその絵文字を再現するのであれば、絵文字のフォントが必要とか、
> いろいろありますが、とりあえずそれを(うりぼう)と置き換えればいいかなと思
> っています。「うりぼう」というのが具体的に何だか分かりませんが、特定の文字や記号に置き
換えるだけでよければ、以下のスレッドが参考になりませんか?携帯からの投稿で絵文字の入力を制限するためには
http://social.msdn.microsoft.com/Forums/ja-JP/aspnetja/thread/1d7459b1-5dd2-4cc6-9b9f-df46aebd0d62au の絵文字は Unicode では E468-E5DF, EA80-EB88 になるそうですので、上記の
ページにアップしたサンプルコードで pattern を以下のように置き換え、string pattern = @"[\uE63E-\uE6A5]|[\uE6AC-\uE6AE]|[\uE6B1-\uE6BA]|[\uE6CE-\uE757]";
↓
string pattern = @"[\uE468-\uE5DF]|[\uEA80-\uEB88]";マッチした文字を String.Empty ではなくて、以下のように特定の記号(例えばゲ
タなら "〓")に置き換えれば可能だと思います。string outputStr = rgx.Replace(text, "");
↓
string outputStr = rgx.Replace(text, "〓");なお、au の絵文字については実際に検証していませんので保証の限りではありませ
ん(i-mode 絵文字では検証した限り OK でしたが)。ご自分で十分検証してくださ
いね。- 回答としてマーク d-kot 2011年4月3日 13:09
-
> うーん…Unicodeで扱えると質問者の方も断言されていますが、Unicodeに
> 変換したのは誰なんでしょう?「変換」の意味がよく理解できてないかもしれませんが・・・
誰も変換しているわけではなくて、以下のページの「図柄タイプ別絵文字一
覧」にあるとおり、もともと外字エリアを使っていて、Shift_JIS, JIS,
Unicode は一対一で決まっているのではないですか?絵文字
http://www.au.kddi.com/ezfactory/tec/spec/3.htmlただ、上記のページの「コンテンツでの絵文字の利用」のように IMG タグ
を利用する場合は先に紹介したコードでは何ともならないかもしれません
が。 -
誰も変換しているわけではなくて、以下のページの「図柄タイプ別絵文字一
覧」にあるとおり、もともと外字エリアを使っていて、Shift_JIS, JIS,
Unicode は一対一で決まっているのではないですか?
これで良いと思うのですが。
private void button1_Click(object sender, EventArgs e) { // 真似しちゃいけないよ label1.Text = ""; label2.Text = ""; List<byte> blist = new List<byte>(); for (int i = 0; i < textBox1.Text.Length; i += 2) { string s = textBox1.Text.Substring(i, 2); blist.Add(byte.Parse(s, System.Globalization.NumberStyles.AllowHexSpecifier)); } string u = Encoding.GetEncoding("iso-2022-jp").GetString(blist.ToArray()); label1.Text = u; foreach (var c in u.ToCharArray()) { label2.Text += ((uint)c).ToString("x02"); } }
フォームに、テキストボックス1つ、ボタン1つ、ラベルを2つ置きます。ボタンの Click イベントを、上のように実装します。テキストボックスに JIS コードを16進数で入力し、ボタンをクリックすると、ラベル1にそれを文字として、ラベル2に文字の Unicode コードを16進数で表示します。
trapemiyaさんが提示されている au の絵文字表から、「△の中に!」である「1b2442eb591b2842」を(エスケープシーケンスと共に)入力します。ボタンをクリックすると、コードとして「30fb(KATAKANA MIDDLE DOT)」が出てきます。これは、期待値「e481」と異なります。「1b24427a671b2842」を入力すると、「淲 6df2」となり、期待値の通りです。ただし、ATOK の文字情報では、この文字の JIS コードは「9525」で、外字に割り当てられています(そして、上記のプログラムでは「・」になる)。IME 2007 では、JIS での割り当てはない、と出てきますね。JIS で、文字の割り当てがない区域について、変換テーブルが用意されていないため、「・」になるようです。変換テーブルは、自前で用意する方が良いかもしれません。
Jitta@わんくま同盟