2011-11-14 175 views
3

时当保存一个文本文件,客户端什么是默认编码得到“A”字符每盈货币符号的。保存为文本文件

我尝试以下,但仍然得到奇怪的字符

using (StreamWriter sr = new StreamWriter(path, false, System.Text.Encoding.UTF8)) 
{ 
    sr.Write(text); 
} 
using (StreamWriter sr = File.CreateText(path)) 
{ 
    sr.Write(text); 
} 

如何保存文件不进行任何编码有什么建议?

+3

您不能将文件保存不进行任何编码,默认编码取决于本地系统(http://msdn.microsoft.com/en-us/library/system.text.encoding.default.aspx上)。你在谈论什么样的货币符号?只有$或有其他人吗? –

+0

问题几乎肯定是客户端使用了错误的编码。你应该知道他们期待/可以成功处理哪些编码并使用它。提供[BOM](http://en.wikipedia.org/wiki/Byte_order_mark) – Justin

+0

可能会有所帮助您如何打开此文件?这里的缺陷似乎比这里更有可能。如果可能的话,使用任何其他UTF-8应该极力劝阻。唉,TARDISs不存在,或者我们可以梳理出来的一劳永逸;) –

回答

12

如何保存文件不进行任何编码有什么建议?

这个问题是没有意义的; “编码”是将字符串转换为字节以存储/传输(例如在磁盘上)的过程。任何文本内容必须有编码。如果你已经保存为UTF8,然后阅读它的人也必须读它 UTF8。您可以尝试包括BOM:

... new StreamWriter(path, false, new UTF8Encoding(true)) 

另外,找出编码/代码页您的机器配置为默认使用,并使用(它是Encoding.Default);例如:

... new StreamWriter(path, false, Encoding.Default) 

如果你的用户表示他们需要在代码页874(又名“泰”),那么你可以使用:

... new StreamWriter(path, false, Encoding.GetEncoding(874)) 
+0

BOM?.......... –

+1

字节顺序标记。 http://en.wikipedia.org/wiki/Byte_order_mark –

+0

@MarcGravell。感谢您的回复。当客户将它保存到Ansi时,它不会出现问题。 – user9969

3

的StreamWriter与流作为输入,将默认为UTF-8 according to the documentation

此构造函数创建使用UTF-8编码一个StreamWriter没有字节顺序标记(BOM),因此它的GetPreamble方法返回一个空字节数组。