none
UTF-32 のコードページは? RRS feed

  • 質問

  •  テキストを いろんな形式で保存するアプリケーションを作っていたんですけれど、UTF-32 形式のコードページが ドキュメントと実装で異なっていました。

     

    ライブラリでは UTF-32/UTF-32BE のコードページは 65005/65006 と記載されていましたが、実際に Encoding.CodePage プロパティで返される値は、12000/12001 でした。

    よく見ると ライブラリの中でも ページによって 65005/65006 と書いてある所と 12000/12001 と書いてある所があるようです。

     

    とりあえず 12000/12001 で Encoding を作成していて、読み書きもちゃんとできていますけど

    …これで合ってるんでしょうか?

    (誰も使わない形式な気もしますが(汗))

    2007年7月9日 22:45

回答

  •  にふてぃ さんからの引用

    ライブラリでは UTF-32/UTF-32BE のコードページは 65005/65006 と記載されていましたが、実際に Encoding.CodePage プロパティで返される値は、12000/12001 でした。

    よく見ると ライブラリの中でも ページによって 65005/65006 と書いてある所と 12000/12001 と書いてある所があるようです。

     

    とりあえず 12000/12001 で Encoding を作成していて、読み書きもちゃんとできていますけど

    …これで合ってるんでしょうか?

    (誰も使わない形式な気もしますが(汗))

     

    結構前の投稿ですが、返答したくなってしまったので…

     

    12000/12001で問題なさそうですね~。

    実際に65005/65006で以下のコードを実行してみたら、見事にErrorになりました・・・

     

    Code Snippet

    public Form1()

    {

    InitializeComponent();

    }

     

    private void Form1_Load(object sender, EventArgs e)

    {

    Encoding encode = Encoding.GetEncoding(65005);

    }

     

     

     

    みごとに、NotSupportedExceptionが発生しました。

    また、以下の投稿の中さんのサンプルで、EncodingのCodePageとDisplayNameの一覧が表示されています。

    http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=273324&SiteID=7

    ここでも、UTF-32のCodePageは12000です。

     

    MSDNには、

    >UTF32Encoding は、Windows コード ページ 12000 (リトル エンディアン バイト順) と

    >12001 (ビッグ エンディアン バイト順) に対応しています。

    と記載がありますので、大丈夫かと。

    http://msdn2.microsoft.com/ja-jp/library/system.text.utf32encoding.aspx

     

    ただ、二つのCodePageが共存してしまっている現状を考えると、System.Text.Encoding.UTF-32 を利用しておくのが一番安全かもしれませんね。

    2007年9月18日 16:23

すべての返信

  •  にふてぃ さんからの引用

    ライブラリでは UTF-32/UTF-32BE のコードページは 65005/65006 と記載されていましたが、実際に Encoding.CodePage プロパティで返される値は、12000/12001 でした。

    よく見ると ライブラリの中でも ページによって 65005/65006 と書いてある所と 12000/12001 と書いてある所があるようです。

     

    とりあえず 12000/12001 で Encoding を作成していて、読み書きもちゃんとできていますけど

    …これで合ってるんでしょうか?

    (誰も使わない形式な気もしますが(汗))

     

    結構前の投稿ですが、返答したくなってしまったので…

     

    12000/12001で問題なさそうですね~。

    実際に65005/65006で以下のコードを実行してみたら、見事にErrorになりました・・・

     

    Code Snippet

    public Form1()

    {

    InitializeComponent();

    }

     

    private void Form1_Load(object sender, EventArgs e)

    {

    Encoding encode = Encoding.GetEncoding(65005);

    }

     

     

     

    みごとに、NotSupportedExceptionが発生しました。

    また、以下の投稿の中さんのサンプルで、EncodingのCodePageとDisplayNameの一覧が表示されています。

    http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=273324&SiteID=7

    ここでも、UTF-32のCodePageは12000です。

     

    MSDNには、

    >UTF32Encoding は、Windows コード ページ 12000 (リトル エンディアン バイト順) と

    >12001 (ビッグ エンディアン バイト順) に対応しています。

    と記載がありますので、大丈夫かと。

    http://msdn2.microsoft.com/ja-jp/library/system.text.utf32encoding.aspx

     

    ただ、二つのCodePageが共存してしまっている現状を考えると、System.Text.Encoding.UTF-32 を利用しておくのが一番安全かもしれませんね。

    2007年9月18日 16:23
  • 古い投稿に関わらず お答えいただいて、ありがとうございます(; ∇)ゞ

    やっぱりドキュメントだけの間違いっぽいですね。

     

    IBM や Sun のサイトで確認したんですけれど、コードページの番号って、メーカーごとに てんでバラバラだったんですね…(汗)

    Windows 環境以外で使う予定はありませんが、ご指摘のように、名前で指定したほうが 間違いないようですネ ^^;

    2007年9月21日 14:09