当从输入文件中读取数据我注意到¥symbom没有被由所述的StreamReader读取。 Mozilla Firefox浏览器显示输入文件类型作为西方(ISO-8859-1)。

玩弄的编码参数,我发现之后,它成功地工作了以下值:

System.Text.Encoding.GetEncoding(1252) // (western iso 88591)

System.Text.Encoding.Default 

System.Text.Encoding.UTF7

现在我打算使用“默认”设置,但我不是很肯定,如果这是正确的决定。现有的代码没有使用任何编码,我很担心我会碰坏。

我知道的很少(或者说没有)约编码。我怎么去呢?我使用System.Text.Encoding.Default安全的决定?我应该是让用户将文件保存在一个特定的格式?

有帮助吗?

解决方案

代码页1252是不完全一样ISO-Latin-1的。如果你想使用ISO-Latin-1,使用Encoding.GetEncoding(28591)。不过,我希望他们成为这个代码点(U + 00A5)相同。 UTF-7是完全不同的(而且几乎从来没有要使用什么)。

Encoding.Default是的的安全 - 这是在大多数情况下,一个非常糟糕的主意。这是特定于正在运行的特定计算机。如果你从一台计算机到另一个,谁知道编码原始计算机使用?传输文件

如果你知道你的文件是ISO-8859-1,然后明确地使用它。什么是生产这些文件?如果他们只是被用户保存的,什么程序,是否能够保存?如果UTF-8是一种选择,这是一个很好的 - 部分是因为它可以与整个统一的应对

我对的Unicode 和另一个上的文章=” http://pobox.com/~skeet/csharp/debuggingunicode.html”相对= “nofollow noreferrer”> 这可能会发现有用的调试的Unicode的问题。

其他提示

  

在现有的代码没有使用任何编码

有可能没有明确地指定的编码,在这种情况下,编码可能默认为Encoding.UTF8。

在名称Encoding.Default可能给人的印象是,这是由类如StreamReader的使用的默认编码,但这种情况并非如此:由于乔恩斯基特指出,Encoding.Default是针对操作系统的当前ANSI编码代码页。

我个人认为,这使得属性名Encoding.Default有些误导。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top