【发布时间】:2015-03-10 16:23:22
【问题描述】:
我正在尝试将 base64 字符串附加到现有文件。这是我的代码:
StreamWriter output = new StreamWriter(file, true, Encoding.ASCII);
output.WriteLine(output.NewLine + str);
这里file是文件路径。
由于某种原因,有一个特定的文件(一个 .cs 文件,如果重要的话),其中附加的实际文本是一串中文字符。它适用于我测试过的所有其他文件。
【问题讨论】:
-
您尝试打印的字符串中是否包含任何非 ASCII 字符?也就是说,任何十进制值> 127的字符?例如,它是否有 Unicode 字节顺序标记 (en.wikipedia.org/wiki/Byte_order_mark)?
-
在这种情况下
str是什么?您是否可能在不截断的情况下覆盖现有文件,而数据只是已经存在的数据? -
几乎可以肯定,您使用错误的 (
ASCII) 编码损坏了文件。验证文件不是 UTF-8(或其他编码)。 -
你已经创建了一个 ASCII 编码的 StreamWriter,但是你的汉字不是 ASCII 编码的一部分。您可能想尝试 Unicode 编码,或者,通过更改文件的编码不破坏文件可能更安全。如果它不是以 ASCII 编码的文件开头怎么办?编码可以通过 BOM 保存到文件中,BOM 是用于确定文件本身的字节顺序和编码的标志。
-
如果原始文件包含 utf-16 BOM,则会发生这种情况。在 Windows 机器上并不少见。
标签: c# string file-io character-encoding streamwriter