默认C#字符串编码

我在C#中遇到了一些默认字符串编码的问题。 我需要从某些文件/数据包中读取字符串。 但是,这些字符串包括128-256范围内的字符(扩展ascii),并且所有这些字符都显示为问号,而不是正确的字符。 例如,在读取字符串时,它可能会显示为“S?meStr?n?” 如果字符串包含扩展的ascii字符。

现在,有没有办法更改我的应用程序的默认编码? 我知道在java中你可以从命令行定义默认字符集。

没有一个单一的“扩展ASCII”编码。 有许多不同的8位编码与底部128值的ASCII兼容。

您需要找出您的文件实际使用的编码,以及使用StreamReader (或您正在使用的任何其他内容)读取数据时的具体信息。 例如,您可能需要编码Windows-1252 :

 Encoding encoding = Encoding.GetEncoding(1252); 

.NET字符串始终是UTF-16代码点的序列。 你不能改变它,你不应该尝试。 (在Java中也是如此,在调用getBytes()等时你真的不应该使用平台默认编码,除非那是你真正的,真正的意思。)

可以在至少一个用于读取文本的函数重载中指定编码 – 例如, ReadAllText(字符串,编码) 。

因此,如果您没有使用Windows-1252编码的文件,那么您可以像这样指定它:

 string contents = File.ReadAllText(someFilePath, Encoding.GetEncoding(1252)); 

当然,这样做需要提前知道正在使用哪个代码页。