Encoding
適切なオブジェクトを取得する必要があります。ASCII はその名の通り ASCII で、7 ビットの ASCII 文字のみをサポートすることを意味します。ファイルを変換する場合は、バイト配列を直接処理するよりも簡単です。
using (System.IO.StreamReader reader = new System.IO.StreamReader(fileName,
Encoding.GetEncoding("iso-8859-1")))
{
using (System.IO.StreamWriter writer = new System.IO.StreamWriter(
outFileName, Encoding.UTF8))
{
writer.Write(reader.ReadToEnd());
}
}
ただし、自分でバイト配列を持ちたい場合は、Encoding.Convert
.
byte[] converted = Encoding.Convert(Encoding.GetEncoding("iso-8859-1"),
Encoding.UTF8, data);
ただし、この道を進みたい場合は、ファイル IO のようなエンコーディング ベースの文字列リーダーを使用しないでください。ファイルの実際のバイトを読み取るため、より適しています。StreamReader
FileStream
問題を完全に調査するには、次のようにします。
using (System.IO.FileStream input = new System.IO.FileStream(fileName,
System.IO.FileMode.Open,
System.IO.FileAccess.Read))
{
byte[] buffer = new byte[input.Length];
int readLength = 0;
while (readLength < buffer.Length)
readLength += input.Read(buffer, readLength, buffer.Length - readLength);
byte[] converted = Encoding.Convert(Encoding.GetEncoding("iso-8859-1"),
Encoding.UTF8, buffer);
using (System.IO.FileStream output = new System.IO.FileStream(outFileName,
System.IO.FileMode.Create,
System.IO.FileAccess.Write))
{
output.Write(converted, 0, converted.Length);
}
}
この例では、buffer
変数にはファイル内の実際のデータが として入力されるbyte[]
ため、変換は行われません。Encoding.Convert
ソースと宛先のエンコーディングを指定し、変換されたバイトを ... という名前の変数に格納しますconverted
。これは、出力ファイルに直接書き込まれます。
私が言ったように、StreamReader
andStreamWriter
を使用する最初のオプションは、これだけを行っている場合ははるかに簡単ですが、後者の例では、実際に何が起こっているかについてのヒントが得られるはずです。