【发布时间】:2010-02-05 19:27:36
【问题描述】:
我正在编写一些代码来清除用户对我的 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 如何将 ASCII 值用于超过 128 个字符,以便我可以编写一个好的清理脚本。
编辑
我提到的值 (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)。当我点击保存时,大引号会保存到数据库中,所以我将使用你们帮助我的代码来清理该内容。
第四版
花了一些时间根据此处的响应编写更多示例代码,并注意到它与 ASP.NET 中的多行文本框有关。这里有很好的信息,所以我决定开始一个新问题:ASP.NET Multiline textbox allowing input above UTF-8
【问题讨论】:
-
但是为什么 test2 有效?如果有什么我希望 test3 工作的话。
-
“正常工作”是什么意思?它是一个不可见的控制字符——它应该显示为一个空白字符串。你期望什么输出?
-
什么是字符 145?是字母还是某种图形?
-
你用两个撇号包围了#2。也许 test2 打印 '' 很容易与“
标签: .net asp.net character-encoding ascii