none
ある文字の文字コードを知るにはどのようにしたらよいでしょうか? RRS feed

  • 質問

  • ある文字の文字コードを知るにはどのようにしたらよいでしょうか?
    ezwebからメールで受信した絵文字が、サンズイ+虎(淲)という文字なんです。
    これを、メモ帳には保存できるのですが、SJIS/EUC/UTF-7/8/16など、ざっくりみてもわかりませんでした。こういうときどのようにしたらよいでしょう?
    2011年3月30日 12:15

回答

  • > 表示には、もしその絵文字を再現するのであれば、絵文字のフォントが必要とか、
    > いろいろありますが、とりあえずそれを(うりぼう)と置き換えればいいかなと思
    > っています。

    「うりぼう」というのが具体的に何だか分かりませんが、特定の文字や記号に置き
    換えるだけでよければ、以下のスレッドが参考になりませんか?

    携帯からの投稿で絵文字の入力を制限するためには
    http://social.msdn.microsoft.com/Forums/ja-JP/aspnetja/thread/1d7459b1-5dd2-4cc6-9b9f-df46aebd0d62

    au の絵文字は 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
    2011年4月3日 7:05

すべての返信

  • 何を求めているのかよくわかりません。

    ・ezweb のメール上でのエンコードを知りたい?
    ・その文字が Shift JIS、EUC-JP、Unicode で表現可能か知りたい?
    ・あるバイト列がその文字であることがわかっていて、その符号化方法を特定したい?


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年3月30日 13:08
    モデレータ
  • 絵文字は携帯各社のかってな文字拡張なので、Windowsで表現できないのも当たり前です。どういった絵文字なのかはezwebなりに確認すべきものです。

    # とはいえ、Unicode標準に取り込まれたので今後は普通に見える時代がやってくるかも。

    2011年3月30日 13:24
  • 淲はJISコードで7A67であり、以下のページでタイプDの表からそれに相当する絵文字を探せば、「うりぼう」かな?

    絵文字
    http://www.au.kddi.com/ezfactory/tec/spec/3.html

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年3月31日 1:07
    モデレータ
  • Azuleanさん、おっしゃるとおりです。
    わたしもなにが知りたいのかよくわかっていなくて、質問しながら頭のなかを整理しようとしています。
    ゴールとしては、ezwebから送られてきたメールを受信して表示したい、ということになります。
    いま受信できていて、ただその該当の絵文字部分が文字化けして別の文字になっています。
    別の文字になる前の文字コードを知り、プログラム上で文字化けしている部分を特定し、必要なら保存時(表示)時の文字コードを変更する、などの処理が必要かと考えています。
    表示には、もしその絵文字を再現するのであれば、絵文字のフォントが必要とか、いろいろありますが、とりあえずそれを(うりぼう)と置き換えればいいかなと思っています。

    保存はWindowsXPで
    File.AppendAllText(saveFileName, contents, Encoding.Default);
    としているので、ShiftJISでしていると思います。

    受信したメールはC#のプログラム上では、Unicodeとして扱っていると思います。

    メールはたしかJISコードで送られてきているのではなかったかと思います。エンコードを指定しない場合は。

    そうすると、JIS→Unicode→SJISと変換をしていて、どこでどうなっているんだろうかと。
    で、場所は特定できたみたいなのだけど、文字コードがわからなくて、その文字をコード表で見ると、台湾の文字コードのなかに見つけられたのですが、さてどうなってるんだみたいな感じで、途方にくれている状況です。
    こう書いてみて、まだ自分が途方にくれていることはわかりました。

    trapemiyaさん、ありがとうございます。
    おっしゃるとおり該当する文字は「うりぼう」です。
    JISコードでは7A67なんですね!
    そのあたりを手がかりしてみます。
    感謝です!

    2011年4月3日 4:53
  • > 表示には、もしその絵文字を再現するのであれば、絵文字のフォントが必要とか、
    > いろいろありますが、とりあえずそれを(うりぼう)と置き換えればいいかなと思
    > っています。

    「うりぼう」というのが具体的に何だか分かりませんが、特定の文字や記号に置き
    換えるだけでよければ、以下のスレッドが参考になりませんか?

    携帯からの投稿で絵文字の入力を制限するためには
    http://social.msdn.microsoft.com/Forums/ja-JP/aspnetja/thread/1d7459b1-5dd2-4cc6-9b9f-df46aebd0d62

    au の絵文字は 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
    2011年4月3日 7:05
  • うーん…Unicodeで扱えると質問者の方も断言されていますが、Unicodeに変換したのは誰なんでしょう?

    ケータイ間ならSHIFT_JISだったり、E-MailならJIS(ISO-2022-JP)だったりする可能性もあって、誰かがUnicodeに変換してると思うのですが。そこの変換仕様によってはUnicodeで意図通りに絵文字を操作できない可能性もあると思います。
    なので最初のコメントで「ezwebなりに確認すべきもの」 と答えました。

    2011年4月3日 9:15
  • > うーん…Unicodeで扱えると質問者の方も断言されていますが、Unicodeに
    > 変換したのは誰なんでしょう?

    「変換」の意味がよく理解できてないかもしれませんが・・・

    誰も変換しているわけではなくて、以下のページの「図柄タイプ別絵文字一
    覧」にあるとおり、もともと外字エリアを使っていて、Shift_JIS, JIS,
    Unicode は一対一で決まっているのではないですか?

    絵文字
    http://www.au.kddi.com/ezfactory/tec/spec/3.html

    ただ、上記のページの「コンテンツでの絵文字の利用」のように IMG タグ
    を利用する場合は先に紹介したコードでは何ともならないかもしれません
    が。

    2011年4月3日 10:08
  • それにしたがってUnicodeに変換されているのであればいいんですが…

    一応「うりぼう」は

    • U+1F417 Unicode 6.0
    • U+EB24 au
    • U+E52F Softbank
    • U+FE1D5 Google
    なんだそうですよ。

    2011年4月3日 10:27
  • SurferOnWwwさん、ありがとうございました。
    置き換えをゲタ(or削除)でなくフォントにするには、テーブルが必要なんですね。
    2011年4月3日 13:09
  • 誰も変換しているわけではなくて、以下のページの「図柄タイプ別絵文字一
    覧」にあるとおり、もともと外字エリアを使っていて、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@わんくま同盟
    2011年4月6日 13:14