|
■No57162 (TAKE さん) に返信
> あいうえお → Shift_JIS
> あいうえお → utf-8
あいうえお → Shift_JIS → 82,A0,82,A2,82,A4,82,A6,82,A8
あいうえお → utf-8 → E3,81,82,E3,81,84,E3,81,86,E3,81,88,E3,81,8A
の事だとすれば、shu さんが回答されているように、Encoding.GetBytes を使うだけで OK です。
byte[] sjis = Encoding.GetEncoding("Shift_JIS").GetBytes("あいうえお");
byte[] utf8 = Encoding.UTF8.GetBytes("あいうえお");
Console.WriteLine("sjis:" + BitConverter.ToString(sjis));
Console.WriteLine("utf8:" + BitConverter.ToString(utf8));
> 日本語文字コードの取得はやはり簡単にはいかず難しいのでしょうか?
「文字コード不明のテキストファイルを読み込む」場合のように、
バイナリからのデコード処理の事を指しているのだとすれば、
ある程度の推測はできますが…確定されないケースもあります。
static void Main()
{
byte[] bin = { 0xe0, 0xdd, 0xe0, 0xea, };
foreach (var x in Conjecture(bin))
{
Console.WriteLine("codepage={0, 6}, [{1}]", x.Key, x.Value);
}
Console.ReadKey();
}
public static IEnumerable<KeyValuePair<int, string>> Conjecture(byte[] bin)
{
int[] code = {
0, // システム既定値
932, // Shift_JIS
1200, // UTF-16
1201, // UTF-16BE
10001, // MacJapanse
20290, // IBM EBCDIC/日本語カタカナ
20932, // JIS 0208-1990 and 0212-1990
50220, // ISO-2022-JP
50221, // JIS 1バイトカナ含む
50222, // JIS 1バイトカナ含む(SO/SI)
51932, // EUC-JP
65000, // UTF-7
65001, // UTF-8
};
// いろいろなコードページを試してみて、
// 変換エラーが発生しなかったものだけを返す
EncoderFallback ef = new EncoderExceptionFallback();
DecoderFallback df = new DecoderExceptionFallback();
foreach (int cp in code)
{
string text;
try
{
text = Encoding.GetEncoding(cp, ef, df).GetString(bin);
}
catch (DecoderFallbackException ex)
{
System.Diagnostics.Debug.WriteLine(cp + ":" + ex.Message);
text = null;
}
if (text != null)
{
yield return new KeyValuePair<int, string>(cp, text);
}
}
}
|