Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# 问号代替空格出现_C#_.net_Character Encoding - Fatal编程技术网

C# 问号代替空格出现

C# 问号代替空格出现,c#,.net,character-encoding,C#,.net,Character Encoding,我有一个CSV文件。在写字板中查看时,某些行的末尾有空格。通过C#中的File.ReadAllText(文件名)读取时,空格显示为?。这可能是什么原因造成的 我想消除这个空白,但使用正则表达式是行不通的,因为问号会弄乱数据 这可能是什么原因造成的 Unicode字母 这可能是什么原因造成的 Unicode字母。很可能是写字板显示为空格的字符实际上是非ASCII字符,或者文件使用的编码是您在C#程序中不希望使用的 在十六进制编辑器中查看该文件 如果您手边没有十六进制编辑器,您可以使用它以字节数组的

我有一个CSV文件。在写字板中查看时,某些行的末尾有空格。通过C#中的File.ReadAllText(文件名)读取时,空格显示为?。这可能是什么原因造成的

我想消除这个空白,但使用正则表达式是行不通的,因为问号会弄乱数据

这可能是什么原因造成的

Unicode字母

这可能是什么原因造成的


Unicode字母。

很可能是写字板显示为空格的字符实际上是非ASCII字符,或者文件使用的编码是您在C#程序中不希望使用的

在十六进制编辑器中查看该文件


如果您手边没有十六进制编辑器,您可以使用它以字节数组的形式读入文件,并在您看到问号的位置附近查找超出可打印ASCII值范围的字节值。

很可能写字板显示为空格的字符实际上是非ASCII字符,或者该文件使用的编码是您在C#程序中不希望使用的

在十六进制编辑器中查看该文件


如果您手边没有十六进制编辑器,可以使用以字节数组的形式读入文件,并在看到问号的位置附近查找超出可打印ASCII值范围的字节值。

您使用什么编码读取文件

默认编码(UTF-8)将高于0x7F(127十进制)的码点表示为2个或更多个八位字节。代码点0xA0(十进制160)在UTF-8中编码为0xC2A0

当解码器读取八位字节0xA0时,表明它是编码在两个八位字节中的码点的引入八位字节。您得到的值是由编码0xA0?表示的代码点??其中“??”是下一个八位字节的十六进制值

您需要以正确的编码读取文件。由于不知道文件的来源,很难知道。假设在Windows环境中,最可能的嫌疑犯是以下编码之一:

  • “标准”windows代码页,windows-1252
  • ISO-8859-1又名拉丁语-1
  • ISO-8859-2又名拉丁语-2
您可以这样获得一个实例:

Encoding windows1252 = Encoding.GetEncoding( "windows-1252" ) ;
Encoding latin1      = Encoding.GetEncoding( "iso-8859-1"   ) ;
Encoding latin2      = Encoding.GetEncoding( "iso-8859-2"   ) ;
用法类似于:

    Encoding windows1252Encoding = Encoding.GetEncoding( "windows-1252" ) ;

    using ( TextReader tr = new StreamReader( @"c:\foo\bar\bazbat.csz" , windows1252Encoding ) )
    {
        string line ;
        while ( null != (line=tr.ReadLine()) )
        {
            process( line ) ;
        }
    }

您使用什么编码来读取文件

默认编码(UTF-8)将高于0x7F(127十进制)的码点表示为2个或更多个八位字节。代码点0xA0(十进制160)在UTF-8中编码为0xC2A0

当解码器读取八位字节0xA0时,表明它是编码在两个八位字节中的码点的引入八位字节。您得到的值是由编码0xA0?表示的代码点??其中“??”是下一个八位字节的十六进制值

您需要以正确的编码读取文件。由于不知道文件的来源,很难知道。假设在Windows环境中,最可能的嫌疑犯是以下编码之一:

  • “标准”windows代码页,windows-1252
  • ISO-8859-1又名拉丁语-1
  • ISO-8859-2又名拉丁语-2
您可以这样获得一个实例:

Encoding windows1252 = Encoding.GetEncoding( "windows-1252" ) ;
Encoding latin1      = Encoding.GetEncoding( "iso-8859-1"   ) ;
Encoding latin2      = Encoding.GetEncoding( "iso-8859-2"   ) ;
用法类似于:

    Encoding windows1252Encoding = Encoding.GetEncoding( "windows-1252" ) ;

    using ( TextReader tr = new StreamReader( @"c:\foo\bar\bazbat.csz" , windows1252Encoding ) )
    {
        string line ;
        while ( null != (line=tr.ReadLine()) )
        {
            process( line ) ;
        }
    }

我知道这是一篇老文章,但我会分享我的修复,因此它可能对某些人有用

我也遇到了类似的问题。当发布.CSV文件时,我应该阅读该文件并提取内容

执行此操作时,所有空白字符都被转换为�����

var contentAsString=Encoding.UTF7 .GetString(contentAsByteArray,0,contentAsByteArray.Length-1)

添加正确的编码类型,修复了我的问题


首先,我以字节数组的形式读取文件,然后应用编码类型。

我知道这是一篇旧文章,但我将分享我的修复,因此它可能对某些人有用

我也遇到了类似的问题。当发布.CSV文件时,我应该阅读该文件并提取内容

执行此操作时,所有空白字符都被转换为�����

var contentAsString=Encoding.UTF7 .GetString(contentAsByteArray,0,contentAsByteArray.Length-1)

添加正确的编码类型,修复了我的问题


首先,我以字节数组的形式读取文件,然后应用编码类型。

您使用什么来查看
文件的返回值。ReadAllText(文件名)
?您使用什么来查看
文件的返回值。ReadAllText(文件名)
?如何正确解决此问题?基本上,我只是删除了空格,但问号却把我的数据弄糟了。我该如何正确地消除这个问题?基本上,我只是删除了空格,但问号弄乱了我的数据。ASCII值是160,这应该是一个不间断的空格,但显示为?。ASCII值只升到127(十进制)。128及以上的值传统上称为扩展ASCII。后来,这些值被各种Unicode编码标准以各种方式使用。值160的解释完全取决于使用的字符编码。160(十六进制中的0xA0)是UTF-8编码中的不间断空格字符。如果您的查看器不支持UTF-8编码,则在不了解更多信息的情况下,无法预测它将显示什么。有些观众会显示一个?或者在这种情况下的其他角色。解决方案,是UTF7。我从未见过有人用UTF7发送任何东西。这是一个excel文件。。。。谢谢ASCII值为160,应为不间断空格,但显示为?。ASCII值最多为127(十进制)。128及以上的值传统上称为扩展ASCII。后来,这些值通过各种Unicode编码标准以各种方式使用。值160的解释完全取决于使用的字符编码。160(十六进制中的0xA0)是UTF-8编码中的不间断空格字符。如果你的vie