gpt4 book ai didi

.net - 手动在ASCII和.NET字符之间转换

转载 作者:行者123 更新时间:2023-12-04 13:29:47 25 4
gpt4 key购买 nike

我正在编写一些代码来清理用户对我的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)是弯引号。因此,左单,右单,左双,右双。

“正确工作”是指它将 curl 的报价输出到我的浏览器。

第二编辑
以下代码(在答案中提到)也输出 curl 引号。因此,问题可能出在测试3中使用ASCII。
char[] characters2 = System.Text.Encoding.Default.GetChars(new byte[] { 147 });
string test4 = new string(characters2);

第三编辑
我找到了可以借用的Mac,能够重现此问题。当我将Word中包含引号的文本复制并粘贴到Mac上的Web应用程序时,它会粘贴 curl 的引号(147和148)。当我点击保存时, curl 引号将保存到数据库中,因此我将使用大家都帮助我的代码来清理该内容。

正确编辑
花了一些时间根据此处的响应编写更多示例代码,并注意到它与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左双引号。

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

System.Text.Encoding.getEncoding(1252).GetChars(new byte[] { 147 })
System.Text.Encoding.Default将为您提供服务器上的默认编码。对于在西欧语言环境中的服务器,它将是1252。在其他地方,它将不是。依赖服务器应用程序中区域设置的默认代码页通常不是一个好主意。

无论如何,您都不应在Web应用程序的输入中获得像147这样的表示 的字节。仅当您的页面本身是代码页1252编码时才会发生这种情况(而且,如果您以ISO-8859-1格式表示页面时,浏览器将静默使用代码页1252,这只会造成更多的混淆和误导)。如果您未能为其指定任何编码,则您的页面也可能位于1252中(浏览器会猜测;其他语言环境会猜测不同的代码页,因此全都乱七八糟)。

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

关于.net - 手动在ASCII和.NET字符之间转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2209794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com