我正在编写代码来清理用户输入到我的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)是卷曲引号。所以单引号左、单引号右、双引号左、双引号右。
“正常工作”意味着它在我的浏览器中输出一个卷曲引号。
第二次编辑 以下代码(在答案中提到)也输出卷曲引号。所以也许问题出在test 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 多行文本框允许输入高于 UTF-8