DOBON.NET DOBON.NETプログラミング掲示板過去ログ

文字コード変換

  • 題名: 文字コード変換
  • 著者: bass
  • 日時: 2005/11/24 1:10:35
  • ID: 13839
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[C# Framework1.1]
分類:[.NET]

文字コード変換について教えてください。
Unicode→UTF8への変換です。

strData:Unicodeの文字列

// @ Unicode→UTF8
byte[] utf8 = Encoding.UTF8.GetBytes(strData);
// A UTF8に変換したbyte[]→stringへ
string strOut = Encoding.UTF8.GetString(utf8);

最終的には、UnicodeからUTF8へ変換した文字列をテキストボックスやファイルに表示させたいのですが、@、Aの方法で合っていますでしょうか。
■No13839に返信(bassさんの記事)
> 文字コード変換について教えてください。
> Unicode→UTF8への変換です。
...
> 最終的には、UnicodeからUTF8へ変換した文字列をテキストボックスやファイ
> ルに表示させたいのですが、(1)、(2)の方法で合っていますでしょうか。

正しいコードだと思います。

ですが、少し引っかかります。

もしかしたら、(2)で得られる文字列が、UTF-8 で表現された文字列であること
を期待していますか? そうだとすると、正しくありません。string 型のインス
タンスは、常に Unicode(UTF-16) で表現された文字列です。

気のせいだったら、間違いの指摘は忘れてくださいね。
■No13842に返信(おおたさんの記事)
> > もしかしたら、(2)で得られる文字列が、UTF-8 で表現された文字列であること
> を期待していますか? そうだとすると、正しくありません。string 型のインス
> タンスは、常に Unicode(UTF-16) で表現された文字列です。

回答ありがとうございます。
指摘通り、UTF-8 で表現された文字列を期待しています。
UTF-8の文字列にすることはできないのでしょうか。
> 指摘通り、UTF-8 で表現された文字列を期待しています。
> UTF-8の文字列にすることはできないのでしょうか。

具体的には、どういった状態を期待していますか?


たとえば「あ」という文字をテキストファイルとして出力する場合、
そのバイナリは、それぞれ
 Shift_JIS なら、82 a0
 euc-jp なら、a4 a2
 UTF-16 なら、42 30 など
 UTF-8 なら、E3 81 82
のような結果になりますよね。

ですが、いずれも『あ』である事には変わり無いのですから、TextBox に
表示する際には、元の文字コードが何であれ、常に "あ" となるでしょう。


それとも、"あ" ではなく、"e3-81-82" などのように表示させたいのでしょうか?
もしそうならば、BitConverter.ToString を試してみてください。
>魔界の仮面弁士
 回答ありがとうございます。

期待しているのは、読める文字でコードがUTF-8です。
INがUnicodeの文字列で、OUTがUTF-8に変換した文字列といった感じです。

Unicode   →変換→   UTF-8
あいうえお        あいうえお
> INがUnicodeの文字列で、OUTがUTF-8に変換した文字列といった感じです。
IN も OUT も「文字列」ならば、変換する必要はありません。
string 自体には、文字コード情報は含まれていませんのでね。
(内部では、文字データが UTF-16 で保持されていますが、それはまた別の話)

もしも IN か OUT のいずれか(もしくは両方)が、文字列ではなく、
ファイルやバイト配列などであれば、Encoding クラスが必要ですが、
IN/OUT が共に文字列なのであれば、それ以上の変換作業は不要です。


> Unicode   →変換→   UTF-8
> あいうえお        あいうえお
実際、bassさんが書かれたこの図を見ても、変換前と後とで、文字情報は
いずれも『あいうえお』のまま、変化していませんよね。
入出力が共に string なら、文字コードを意識する意味はありません。


もし、OUT を(文字列ではなく)UTF-8のテキストファイルにしたいのであれば、
  StreamWriter(パス, false, Encoding.UTF8)
で開いたファイルに対して、.Write(string) メソッドで書き込むという方法が
使えますが、この時 Writeメソッドで指定する文字列自体には、文字コードの
情報は含まれていませんので、事前に UTF-16 → UTF-8 の変換などは不要です。
  • 題名: Re[6]: 文字コード変換
  • 著者: bass
  • 日時: 2005/11/24 16:36:48
  • ID: 13855
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
魔界の仮面弁士さんのテキストファイルする方法でやってみたいと思います。
ありがとうございました。

#一応、解決済みとします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板