locked
文字コード シフトJIS←→UTF8の変換をするにはどうすればよろしいでしょうか? RRS feed

  • 質問

  • 文字コード シフトJIS←→UTF8など(UTF16LEやUTF16BE)の変換をするにはどうすればよろしいでしょうか?

    System.Text.Encoding.GetEncoding("Shift_JIS")

    上記の方法では下記のエラーが出てしまいます。
    'Shift_JIS' はサポートされたエンコード名ではありません。

    どなたか,アドバイスいただければ幸いです。
    2009年6月26日 1:00

回答

  • 以下のURLにサポートされているエンコーディングが載っています。
    http://msdn.microsoft.com/en-us/library/t9a3kf7c(VS.95).aspx
    ーutf-8 UTF8Encoding
    ーutf-16 UnicodeEncoding (little-endian)
    ーutf-16BE UnicodeEncoding (big-endian)
    ーutf-16LE UnicodeEncoding (little-endian)

    基本的にSilverlightアプリ内ではUTFで取り扱い、サーバサイドで文字コード変換を行った方が良いと思いますが・・・。
    Silverlightアプリ内でShift_jis又はMS932変換はちょっとしんどそうですね・・・。
    • 回答としてマーク VB User1 2009年7月3日 3:05
    2009年6月26日 2:32

すべての返信

  • 以下のURLにサポートされているエンコーディングが載っています。
    http://msdn.microsoft.com/en-us/library/t9a3kf7c(VS.95).aspx
    ーutf-8 UTF8Encoding
    ーutf-16 UnicodeEncoding (little-endian)
    ーutf-16BE UnicodeEncoding (big-endian)
    ーutf-16LE UnicodeEncoding (little-endian)

    基本的にSilverlightアプリ内ではUTFで取り扱い、サーバサイドで文字コード変換を行った方が良いと思いますが・・・。
    Silverlightアプリ内でShift_jis又はMS932変換はちょっとしんどそうですね・・・。
    • 回答としてマーク VB User1 2009年7月3日 3:05
    2009年6月26日 2:32

  • 変換の関数はないのでテーブルデータを用意して
    シフトJISの文字列を数値データ(UInt16 sjis)として与えて
    UTF-8の1文字を返す物を作って使用しています。
    具体例を書いて見ました。
    データを追加されれば第2水準までできますが
    分割して別ファイルにされないと ソースリストの行が長すぎた場合は
    エディタの反応が劇的に遅くなるので注意が必要です。

    UInt16[] SJIS_0 = {
               0x824F,  //  0
               0x8250,  //  1
               0x8251,  //  2
               0x8252,  //  3
               0xffff   //end code
    };
    string[] UTF8m_0 = {
               "0",  // 0
               "1",  // 1
               "2",  // 2
               "3",  // 3
    };
    /*
    コードが必要ならこーいう感じのデータを作る
    UInt32[] UTF8_0 = {
               0xEFBC90,  //0
               0xEFBC91,  //1
               0xEFBC92,  //2
               0xEFBC93,  //3
    };
    */
    string SJIS_TO_UTF8m(UInt16 sjis)
    {
       int i = 0;
       string utf8 = "";
       if (sjis <= 0)
       {
           return "";
       }
       ////////////////////////////////////
       i = 0;
       while (SJIS_0[i] != 0xffff)
       {
           if (SJIS_0[i] == sjis)
           {
               utf8 = UTF8m_0[i];
               return utf8;
           }
           i++;
       }
       return "";
    }

     

    2009年9月15日 17:57