UTF8字符写入文件时丢失

时间:2016-05-05 22:08:35

标签: c# filestream

我正在创建一个扫描和合并CSV文件的应用程序。将数据写入新文件时遇到问题。其中一个字段具有ö字符,直到我将其写入新文件为止。然后它变成“实际”值:¶而不是“预期”值:ö

我怀疑UTF8编码不是最好用的,但尚未找到更好的工作方法。任何有关这方面的帮助将非常感激!

byte[] nl = new UTF8Encoding(true).GetBytes("\n");
using (FileStream file = File.Create(filepath))
{
string text;
byte[] info;

for (int r = 0; r < data.Count; r++)
{
    int c = 0;
    for (; c < data[r].Count - 1; c++)
    {
        text = data[r][c] + @",";
        text = text.Replace("\n", @"");
        text = text.Replace(@"☼", @"""");

        info = new UTF8Encoding(true).GetBytes(text);
        file.Write(info, 0, text.Length);
    }

    text = data[r][c];
    info = new UTF8Encoding(true).GetBytes(text);
    file.Write(info, 0, text.Length);

    file.Write(nl, 0, nl.Length);
}

}

byte[] nl = new UTF8Encoding(true).GetBytes("\n"); using (FileStream file = File.Create(filepath)) { string text; byte[] info; for (int r = 0; r < data.Count; r++) { int c = 0; for (; c < data[r].Count - 1; c++) { text = data[r][c] + @","; text = text.Replace("\n", @""); text = text.Replace(@"☼", @""""); info = new UTF8Encoding(true).GetBytes(text); file.Write(info, 0, text.Length); } text = data[r][c]; info = new UTF8Encoding(true).GetBytes(text); file.Write(info, 0, text.Length); file.Write(nl, 0, nl.Length); }

2 个答案:

答案 0 :(得分:1)

我可能错了,这可能应该发表评论,但我还不能发表评论。文本编辑器将二进制数据解码为特定编码。您可以在十六进制编辑器中检查实际的二进制数据。您可以验证要写入文件的二进制数据。 Notepad ++有一个你可以使用的十六进制编辑器插件。

在将字节写入文件时,

BinaryWriter 更容易使用。您还可以设置BinaryWriter的编码。您需要将其设置为UTF-8。

修改

我忘了提。当你写出字节时,你也想要以字节读入。使用BinaryReader并将编码设置为UTF-8。

读取使用中的字节Encoding.UTF8.GetString()后,将字节转换为字符串。

答案 1 :(得分:1)

您可能会截断输出,因为UTF-8是多字节的。

不要这样做:

info = new UTF8Encoding(true).GetBytes(text);
file.Write(info, 0, text.Length);

而是使用info.Length

info = new UTF8Encoding(true).GetBytes(text);
file.Write(info, 0, info.Length); // change this line