Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么字节150在记事本中显示为破折号,但在我按程序阅读时却不显示?_C#_Text - Fatal编程技术网

C# 为什么字节150在记事本中显示为破折号,但在我按程序阅读时却不显示?

C# 为什么字节150在记事本中显示为破折号,但在我按程序阅读时却不显示?,c#,text,C#,Text,我有一个文件在记事本(和记事本++)中看起来不错,但当我试图用C#程序读取它时,破折号显示为替换字符(�) 相反,经过一些尝试和错误,我可以复制错误如下: File.WriteAllBytes("C:\\Misc\\CharTest\\wtf.txt", new byte[] { 150 }); var readFile = File.ReadAllText("C:\\Misc\\CharTest\\wtf.txt&q

我有一个文件在记事本(和记事本++)中看起来不错,但当我试图用C#程序读取它时,破折号显示为替换字符(�) 相反,经过一些尝试和错误,我可以复制错误如下:

            File.WriteAllBytes("C:\\Misc\\CharTest\\wtf.txt", new byte[] { 150 });
            var readFile = File.ReadAllText("C:\\Misc\\CharTest\\wtf.txt");
            Console.WriteLine(readFile);
现在,如果你用记事本查看wtf.txt文件,你会看到一个破折号…但我不明白。我知道这不是一个“真实”的Unicode值,所以这可能是问题的根源,但我不明白为什么它在记事本中看起来很好,而在我读取文件时却不好。我如何让文件以破折号的形式读取它

另一方面,我试图用C语言重写的VB6程序也将其读取为破折号。

文件.ReadAllText(string)重载,其中值为150的独立字节无效

指定文件的实际编码,例如:

var encoding=encoding.GetEncoding(1252);
字符串内容=File.ReadAllText(文件名,编码);
我使用了编码,在代码点150处有一个破折号


编辑:记事本正确显示文件,因为对于非Unicode文件,Windows-1252代码页是西部地区设置的默认值。因此,您也可以使用
编码。默认值为
以获得正确的结果,但请记住
编码。默认值为
可以返回具有不同注册表的不同代码页独立设置。

文件.ReadAllText(string)
重载,其中值为150的独立字节无效

指定文件的实际编码,例如:

var encoding=encoding.GetEncoding(1252);
字符串内容=File.ReadAllText(文件名,编码);
我使用了编码,在代码点150处有一个破折号



编辑:记事本正确显示文件,因为对于非Unicode文件,Windows-1252代码页是西部地区设置的默认值。因此,您也可以使用
编码。默认值为
以获得正确的结果,但请记住
编码。默认值为
可以返回具有不同注册表的不同代码页全国设置。

您正在文本文件中写入字节。您正在读取这些字节并将其解释为字符。 现在,当您写入字节时,您不需要考虑编码,而必须这样做,以便读取与char相同的字节

记事本++似乎将字节解释为Unicode字符,因此会打印。
现在,您没有指定它,它将被设置为UTF-8,看起来是UTF-8。

您正在文本文件中写入字节。您正在读取这些字节并将它们解释为字符。 现在,当您写入字节时,您不需要考虑编码,而必须这样做,以便读取与char相同的字节

记事本++似乎将字节解释为Unicode字符,因此会打印。
现在,您没有指定它,它将被设置为UTF-8,。

谢谢!您的编码是正确的。默认值有效,但仅在C#4.x和更早版本中有效。在.Net Core 3中,UTF-8是默认值(我假设几天后出现的.Net 5也是如此)谢谢!您的编码是对的。默认值有效,但仅在C#4.x及更早版本中有效。在.Net Core 3中,UTF-8是默认值(我假设.Net 5在几天后发布时也是如此)