StreamReader的问题 - 未知的文件编码(西部ISO 88591)
-
21-08-2019 - |
题
当从输入文件中读取数据我注意到¥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有些误导。
您一个软件开发人员?不要忘记阅读乔尔斯波斯基的 绝对最低每一个软件开发人员绝对,积极必须知道的关于Unicode和字符集(没有借口!)强>