c#字符串字符0x85(省略号?)

c#字符串字符0x85(省略号?),c#,string,C#,String,我的c#程序(通过windows消息队列)接收字符串数据,有时在字符串中包含char-133 这是c#中的有效值吗 例如,如果我这样做: string x = "a" + (char)133 + "b"; // 133 = 0x85 我可以看到字符串x的长度为3,但在Visual Studio调试器中,我只能看到x=“ab” 如果我执行以下操作,我会得到“省略号”字符(我认为133也应该来自提供它的程序): 感谢您的指点。在字符串中字符没有“无效”值。有“无效的Unicode代码点”,但是字符

我的c#程序(通过windows消息队列)接收字符串数据,有时在字符串中包含char-133

这是c#中的有效值吗

例如,如果我这样做:

string x = "a" + (char)133 + "b"; // 133 = 0x85
我可以看到字符串x的长度为3,但在Visual Studio调试器中,我只能看到x=“ab”

如果我执行以下操作,我会得到“省略号”字符(我认为133也应该来自提供它的程序):


感谢您的指点。

字符串中
字符没有“无效”值。有“无效的Unicode代码点”,但是
字符串
可以毫无问题地包含它们,因为
字符串
是一个“愚蠢的容器”(但请注意,一些
字符串
方法“更智能”,不太喜欢无效的代码点……通常它们会跳过它们/用一些替换字符替换它们)

现在。。。“可视化工具”(必须“显示”字符串的模块/函数/方法)通常有局限性,无法显示所有字符(即使是完全有效的字符)。。。一个典型的例子是和。这是您的问题,但这是另一个问题:-)

举个例子,在Windows中,至少有4个“官方”API可以将文本写入屏幕:GDI、GDI+、Uniscribe和DirectWrite。而许多程序(主要是游戏)则使用FreeType库作为替代。。。这些库中的每一个都与Unicode的某些部分兼容

我将添加给您造成问题的字符(0x85)称为。它是一个控制字符,所以不是应该“显示”的东西,它有一个,这可以解释为什么它有时显示为省略号:

NEL的代码已在Windows-1252中用作省略号(“…”)

例如:

  • 为了与JSON兼容,YAML[8]不再将它们视为特殊的

  • ECMAScript[9]接受LS和PS作为换行符,但考虑U+0085(NEL)空白,而不是换行符

  • Microsoft Windows 2000不将NEL、LS或PS中的任何一个视为默认文本编辑器记事本中的换行符

在Linux上,流行的编辑器gedit将LS和PS视为换行符,但不将其视为NEL


字符串中
字符没有“无效”值。有“无效的Unicode代码点”,但是
字符串
可以毫无问题地包含它们,因为
字符串
是一个“愚蠢的容器”(但请注意,一些
字符串
方法“更智能”,不太喜欢无效的代码点……通常它们会跳过它们/用一些替换字符替换它们)

现在。。。“可视化工具”(必须“显示”字符串的模块/函数/方法)通常有局限性,无法显示所有字符(即使是完全有效的字符)。。。一个典型的例子是和。这是您的问题,但这是另一个问题:-)

举个例子,在Windows中,至少有4个“官方”API可以将文本写入屏幕:GDI、GDI+、Uniscribe和DirectWrite。而许多程序(主要是游戏)则使用FreeType库作为替代。。。这些库中的每一个都与Unicode的某些部分兼容

我将添加给您造成问题的字符(0x85)称为。它是一个控制字符,所以不是应该“显示”的东西,它有一个,这可以解释为什么它有时显示为省略号:

NEL的代码已在Windows-1252中用作省略号(“…”)

例如:

  • 为了与JSON兼容,YAML[8]不再将它们视为特殊的

  • ECMAScript[9]接受LS和PS作为换行符,但考虑U+0085(NEL)空白,而不是换行符

  • Microsoft Windows 2000不将NEL、LS或PS中的任何一个视为默认文本编辑器记事本中的换行符

在Linux上,流行的编辑器gedit将LS和PS视为换行符,但不将其视为NEL


您的问题显示
(char)133
是字符串中的字符。你的问题是什么?嗨,谢谢。我对unicode、utf-8和c#string进行了更多的研究,并开始了解更多。您是正确的,字符串确实包含字符0x85。此字符在unicode中是“控制字符”(在扩展ascii中是省略号字符)。很明显,我正在使用的“程序堆栈”中存在不匹配-一些程序正在发送ascii,我可以看到它在windows消息队列中编码为utf-8,而我的程序读取为unicode。毫无疑问!我只需要正确解释输入。请试着忘记曾经有ascii这样的东西,它只会妨碍你。如果你愿意,我不介意在聊天中解释一些事情,但最重要的是没有“纯文本”这样的东西。它根本不存在。您的问题表明
(char)133
是字符串中的字符。你的问题是什么?嗨,谢谢。我对unicode、utf-8和c#string进行了更多的研究,并开始了解更多。您是正确的,字符串确实包含字符0x85。此字符在unicode中是“控制字符”(在扩展ascii中是省略号字符)。很明显,我正在使用的“程序堆栈”中存在不匹配-一些程序正在发送ascii,我可以看到它在windows消息队列中编码为utf-8,而我的程序读取为unicode。毫无疑问!我只需要正确解释输入。请试着忘记曾经有ascii这样的东西,它只会妨碍你。如果你愿意,我不介意在聊天中解释一些事情,但最重要的是没有“纯文本”这样的东西。它根本不存在。谢谢!我读了更多关于unicode、utf-8和扩展ascii的内容。似乎0x85是扩展的ascii字符
string y = "a" + (char)8230 + "b"; // 8230 = 0x2026