Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 清除URL中的外来字符/重音符号_C#_Asp.net_String_Asp.net 4.0 - Fatal编程技术网

C# 清除URL中的外来字符/重音符号

C# 清除URL中的外来字符/重音符号,c#,asp.net,string,asp.net-4.0,C#,Asp.net,String,Asp.net 4.0,我需要编写一个服务器端函数来清理URL编码的字符串 查询字符串示例: FirstName=John&LastName=B%F3th&Address=San+Endre+%FAt+12%2F14 当我通过http://code>HttpUtility.UrlDecode() FirstName=John&LastName=B�th&Address=San Endre �t 12/14 此函数看起来很完美,但它需要已解码的字符串,这些字符串已带有重音符号: Rem

我需要编写一个服务器端函数来清理URL编码的字符串

查询字符串示例:

FirstName=John&LastName=B%F3th&Address=San+Endre+%FAt+12%2F14
当我通过http://code>HttpUtility.UrlDecode()

FirstName=John&LastName=B�th&Address=San Endre �t 12/14
此函数看起来很完美,但它需要已解码的字符串,这些字符串已带有重音符号:

RemoveDiacritics('Bóth`) ==> 'Both';
RemoveDiacritics('San Endre út 12/14`) ==> 'San Endre ut 12/14';
如何解码URL而不获取所有这些
字符


我无法在客户端执行任何操作或更改它们进入我的函数的方式。

UrlDecode需要UTF-8作为其输入,其中大于\u007F的每个字符至少编码为2个字节。因此,正确的字符串(如果字符为\u00F3,则为ó)应该包含
%C3%B3
,而不是
%F3

如果字符串按你的方式到达,我不确定你能做什么。也就是说,标准库中没有


顺便说一句,去掉外来字符的口音是可以的,但我不会称之为“净化”

%F3和%FA不是UTF8或ASCII编码。看起来客户端代码在当前页面的区域设置中对字符串进行编码

根据您的需要,您可以简单地去掉127以上的所有字符,或者找出如何正确解码传入的Url(我不认为存在内置函数来处理它)


我会将字符复制到字节数组中(包括手动解码的%-编码的字符),并使用正确的编码将其转换为字符串(使用Encoding.GetString-)。

我同意已经提出的论点;但是,如果您总是从同一个客户机接收编码的字符串,那么您可以匹配它们的编码。在这种情况下,它们似乎正在使用非正式名称为Latin-1,这是使用中最流行的8位字符集之一。您可以使用以下代码解码ISO/IEC 8859-1(该代码将正确解码您提供的样本字符串):


MSDN保证上述代码页将由.NET Framework本机支持,无论底层平台为何;请参阅支持的编码表。

公平地说,现有的解码方法确实“正确解码”传入url。。。只要传入的url符合规范…@markgravel,说得好。我用“适当”作为“在这个案例中它的工作方式”,而不是“它应该做的方式”。这看起来像是打电话的失败。。。你控制客户端应用程序吗?@marcGravel不,不幸的是我无法控制它。你知道调用什么类型的编码
B%F3th
?也许我可以试着找到一个转换函数?嗯,它很可能是Windows-1252,所以你可以试着找到一个使用它的解码例程。
HttpUtility.UrlDecode(encodedInput, Encoding.GetEncoding("iso-8859-1"));