2016-09-23 96 views
-1

我想写一个字符串到一个文件。字符串附加到文件转换为特殊字符

 string lines = "server.1=1.1.1.1:9999\nserver.2=2.2.2.2:8888\n"; 
     File.AppendAllText(directory_path + "zoo.cfg", lines); 

在文件中印刷的字符串是

“敳癫牥ㄮㄽㄮㄮㄮ㤺㤹ਹ敳癫牥㈮㈽㈮㈮㈮㠺㠸ਸ”

。 我试着在File.AppendAllText中编码ASCII,UTF-8,DEFAULT。但输出是一样的。

环境:

的Visual Studio 2015年,Windows Server 2012中,.NET V4.5

请让我知道荫做错了什么?

+1

你能创建一个可重复的例子吗?您发布的代码无错误地工作,并在文件中创建适当的文本。 – stuartd

+1

现有文件的编码是什么?你如何阅读它? – CodeCaster

+0

这不是我问过的。再次阅读我的评论,并正确回答这两个问题。 – CodeCaster

回答

0

好吧,现在这很奇怪。上面给出的代码在我的另一台机器上完美工作。但由于某种原因,我不知道它不适用于我的新开发环境。 我通过添加Encoding.Unicode参数来解决问题。

File.AppendAllText(windows_directory_path + "zoo.cfg", lines, Encoding.Unicode);

不知道为什么Encoding.UTF8/Encoding.ASCII没有改变格式生成的字符串。

仍然想知道同样的代码行为如何不同。

我不确定这是修复还是解决办法。

2

追加不会重写整个文件。所以,你必须使用与现有内容相同的编码。

一般来说,如果你不知道文本的编码,你可能不会有那个文本。如果有人给你,“把它寄回来。”当他们发送给你时,必须伴随着对所用编码的相互理解。 (顺便说一句 - 它不太可能是ASCII码,而且Encoding.Default在机器之间或用户之间是无用的。)

给出结果,文件编码是UTF-16(Encoding.Unicode)是完全有意义的。使用任何其他编码写入垃圾代码。