我正在创建一个扫描和合并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);
}
答案 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