手动转换ASCII和.NET字符

我正在编写一些代码来擦除我的ASP.NET站点用户输入.我需要擦除输入以删除对ASCII字符145,146,147,148的所有引用,这些引用偶尔会从我的mac用户那里获得输入,这些用户正在复制和粘贴他们在Mac上的文字处理器中写入的内容.

我的问题是我认为应该输出相同文本的以下三个字符串.

string test1 = Convert.tochar(147).ToString();
string test2 = String.Format("'{0}'",Convert.tochar(147));

char[] characters = System.Text.Encoding.ASCII.GetChars(new byte[] { 147 });
string test3 = new string(characters);

然而,当我将ASP TextBox设置为等于以下内容

txtShowValues.Text = test1 + "*" + test2 + "*" + test3;

我得到test1的空白值,test2正常工作,test3输出为’?’.

有人可以用不同的方式解释发生的事情.我希望这将有助于我理解.NET如何使用超过128的字符的ASCII值,以便我可以编写一个很好的清理脚本.

编辑
我提到的值(145-148)是卷曲引号.单左,右单,双左,双右.

通过“正常工作”我的意思是它输出一个卷曲的报价给我的浏览器.

第二次编辑
以下代码(在答案中提到)也输出了引号.所以问题可能是在测试3中使用ASCII.

char[] characters2 = System.Text.Encoding.Default.GetChars(new byte[] { 147 });
string test4 = new string(characters2);

第三次编辑
我发现了一个可以借用的mac,并能够复制问题.当我将包含引号符号的文本从Word复制并粘贴到我在Mac上的Web应用程序中时,它会粘贴引号(147和148).当我点击保存时,卷曲引号被保存到数据库中,因此我将使用您帮助我的代码来擦除该内容.

FOUTH EDIT
花了一些时间根据这里的响应编写更多示例代码,并注意到它与ASP.NET中的MultiLine TextBoxes有关.这里有很好的信息,所以我决定刚开始一个新问题:ASP.NET Multiline textbox allowing input above UTF-8

解决方法

字符147是U 0093 SET TRANSMIT STATE.与0-255范围内的所有Unicode字符一样,它与相同数字的ISO-8859-1字符相同. ISO-8859-1为这个不可见的控制代码分配了147.

你想到的不是’ASCII’甚至’ISO-8859-1′,而是Windows代码页1252.这是一个非标准的编码,就像8859-1,但是将字符128-159分配给各种印刷扩展,如智能报价,而不是很大程度上无用的控制代码.在代码页1252中,字符147是“,即U 201C LEFT DOUBLE QUOTATION MARK.

如果要将Windows代码页(通常误导性地称为“ANSI”)转换为Unicode字符,则需要指定所需的代码页,例如:

System.Text.Encoding.getEncoding(1252).GetChars(new byte[] { 147 })

System.Text.Encoding.Default将为您提供服务器上的认编码.对于西欧语言环境中的服务器,这将是1252.在其他地方,它不会.在服务器应用程序中依赖于语言环境的代码页通常不是一个好主意.

在任何情况下,您都不应该获得像147这样的字节,表示“在Web应用程序的输入中”.只有当您的页面本身处于代码页1252编码时才会发生这种情况(并且只是为了混淆和误导更多,当您说您的页面采用ISO-8859-1格式时,浏览器将使用代码页1252).如果你没有为它指定任何编码,你的页面也可能在1252(浏览器猜测;其他语言环境会猜测不同的代码页,所以它们都是一团糟).

确保您对Web应用程序中的所有编码使用UTF-8和mark your pages as such.今天,所有Web应用程序都应使用UTF-8.

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...