|
|
1
11
字符147是U+0093设置发送状态。与0-255范围内的所有Unicode字符一样,它与相同数字的ISO-8859-1字符相同。ISO-8859-1将147分配给这个不可见的控制代码。
您所想的不是__ascii__甚至是__iso-8859-1_,而是Windows代码页1252。这是一种非标准编码,即
喜欢
8859-1,但将字符128-159分配给各种排版扩展,如智能引号,而不是基本上无用的控制代码。在代码页1252中,字符147是
如果要将Windows代码页(通常错误地称为__ansi_)转换为Unicode字符,则需要指定所需的代码页,例如:
无论如何,你应该
不
像147这样的字节代表
确保对Web应用中的所有编码都使用UTF-8,并且 mark your pages as such .今天,所有的Web应用程序都应该使用UTF-8。 |
|
|
2
3
.NET使用的Unicode(UCS-2)与ASCII相同,仅用于128以下的值。 ASCII没有定义高于127的值。 我认为您可能会想到ANSI,它将127以上的值定义为(大部分)大多数欧洲语言所需的语言字符。或OEM(原始的IBM PC字符集),它将字符>127定义为(大部分)符号。
127以上字符的解释方式的差异称为代码页或编码。(因此,System.Text.Encoding)。因此,如果使用不同的编码,您可能会使测试3正常工作,也许
编辑:好吧,既然我们知道了您想要的编码是ANSI,那么现在发生的事情就更清楚了。 字符转换的规则是替换在编码中不能表示为其他字符(通常是一个方框)的字符。但是对于ASCII,没有方框字符,所以它使用?相反。这就解释了测试3。 测试1和2都使用了带整数常量的convert.tochar。它将把输入解释为Unicode字符,而不是ANSI字符,因此不应用转换。Unicode字符147是非打印字符。 |
|
|
3
0
我在一个控制台应用程序(.net 3.5sp1)中得到了所有3个问号。据我所知,它们都应该是等效的。约翰·诺勒关于ASCII和ANSI是正确的。 您是否尝试在原始字符串上使用一个编码类“getBytes()并迭代,删除(通过将“好”字节复制到另一个缓冲区)您不想要的值? 例如(使用LINQ):
老实说,在这里使用ASCII可能是错误的;如果原始文本是Unicode,它可能会做一些不好的事情(例如,如果您通过了UTF-16)。 |