手动转换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值,以便我可以编写一个很好的清理脚本. 编辑 通过“正常工作”我的意思是它输出一个卷曲的报价给我的浏览器. 第二次编辑 char[] characters2 = System.Text.Encoding.Default.GetChars(new byte[] { 147 }); string test4 = new string(characters2); 第三次编辑 FOUTH EDIT 解决方法
字符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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net文件上传功能(单文件,多文件,自定义生成缩略图,水印
- asp.net-mvc – CssRewriteUrlTransform没有被调用
- asp.net – MVC 6 WebAPI返回序列化的HttpResponseMessage而
- asp.net-mvc – MvcHtmlString.Create()和Html.Raw()之间的
- asp.net – SignalR,Owin和异常处理
- 如何创建一个asp.net会员提供者手动加密密码?
- ASP.NET MVC5 ModelBinder
- asp.net-mvc – Asp.Net Mvc Checkbox为默认值?
- asp.net-mvc – ASP.NET MVC:访问集合中项目的ModelMetada
- asp.net-mvc – 使用ASP.NET MVC响应REQUEST_METHOD = HEAD