| ■No57168 (TAKE さん) に返信
> Encoding.GetEncoding("Shift_JIS").GetBytes("あいうえお");
> で、Shift_JISにエンコード後、バイト列になりますが
> 用が済んで戻す時に本来の文字コードが不明のため
自分でエンコード(符号化)したデータという事でしょうか?
であれば、Encoding 情報もどこかに保持しておく事はできないのでしょうか。
たとえば XML テキストなら <?xml version="1.0" encoding="Shift_JIS"?> を
埋め込んでおくという手法が使えます。
プレーンテキストの場合はそうもいきませんが、たとえばそのファイルを
・Shift_JIS
・UTF-8(BOM 付)
・UTF-16(BOM 付)
のいずれかに限定する事ができるようなケースでは、最初の数バイトを見て判断できます。
> 再エンコードできないため、
デコードするのではなく、
エンコードしなおす、という事ですか?
> 取得できないものかと思ったところです。
とりあえず、先述の方法などをつかって「推測」することはできます。
ただし、複数の解釈が可能なデータの場合が問題になってきますね。
"+MEIwRDBG-" という文字列は、Shift_JIS では 2B,4D,45,49,77,52,44,42,47,2D です。
"あいう" という文字列は、 UTF-7 では 2B,4D,45,49,77,52,44,42,47,2D です。
"ABC" という文字列は、Shift_JIS では 41,42,43 です。
"ABC" という文字列は、 UTF-8 では 41,42,43 または EF,BB,BF,41,42,43 です。
"珎瑕" という文字列は、Shift_JIS では E0,DD,E0,EA です。
"珈琲" という文字列は、 EUC-JP では E0,DD,E0,EA です。
"珈琲" という文字列は、Shift_JIS では E0,DB,E0,E8 です。
"獻琥" という文字列は、 EUC-JP では E0,DB,E0,E8 です。
人間であれば、復元された文字列の内容を見て成否を判断できますが、
そのようなファジーな処理をプログラムに組み込むことは困難でしょう。 |