我的应用程序中有一个文本框,文本框中的文本通过 POST 请求作为发布数据发送。如果我在文本中包含任何符号,例如 £ 或 $,它会将它们转换为问号。
我需要做任何编码来阻止这种情况的发生吗
编辑我无权访问另一端的服务器。
我的应用程序中有一个文本框,文本框中的文本通过 POST 请求作为发布数据发送。如果我在文本中包含任何符号,例如 £ 或 $,它会将它们转换为问号。
我需要做任何编码来阻止这种情况的发生吗
编辑我无权访问另一端的服务器。
我一直在试验 .NET 为 URL 编码提供的各种方法。也许下表会有用:
Unencoded UrlEncoded UrlEncodedUnicode UrlPathEncoded EscapedDataString EscapedUriString HtmlEncode HtmlAttributeEncode HexEscape
A A A A A A A A %41
B B B B B B B B %42
C C C C C C C C %43
D D D D D D D D %44
a a a a a a a a %61
b b b b b b b b %62
c c c c c c c c %63
d d d d d d d d %64
0 0 0 0 0 0 0 0 %30
1 1 1 1 1 1 1 1 %31
2 2 2 2 2 2 2 2 %32
3 3 3 3 3 3 3 3 %33
[space] + + %20 %20 %20 [space] [space] %20
! ! ! ! ! ! ! ! %21
" %22 %22 " %22 %22 " " %22
# %23 %23 # %23 # # # %23
$ %24 %24 $ %24 $ $ $ %24
% %25 %25 % %25 %25 % % %25
& %26 %26 & %26 & & & %26
' %27 %27 ' ' ' ' ' %27
( ( ( ( ( ( ( ( %28
) ) ) ) ) ) ) ) %29
* * * * * * * * %2A
+ %2b %2b + %2B + + + %2B
, %2c %2c , %2C , , , %2C
- - - - - - - - %2D
. . . . . . . . %2E
/ %2f %2f / %2F / / / %2F
: %3a %3a : %3A : : : %3A
; %3b %3b ; %3B ; ; ; %3B
< %3c %3c < %3C %3C < < %3C
> %3e %3e > %3E %3E > > %3E
= %3d %3d = %3D = = = %3D
? %3f %3f ? %3F ? ? ? %3F
@ %40 %40 @ %40 @ @ @ %40
[ %5b %5b [ %5B %5B [ [ %5B
] %5d %5d ] %5D %5D ] ] %5D
\ %5c %5c \ %5C %5C \ \ %5C
^ %5e %5e ^ %5E %5E ^ ^ %5E
_ _ _ _ _ _ _ _ %5F
` %60 %60 ` %60 %60 ` ` %60
{ %7b %7b { %7B %7B { { %7B
} %7d %7d } %7D %7D } } %7D
| %7c %7c | %7C %7C | | %7C
~ %7e %7e ~ ~ ~ ~ ~ %7E
Ā %c4%80 %u0100 %c4%80 %C4%80 %C4%80 Ā Ā [OoR]
ā %c4%81 %u0101 %c4%81 %C4%81 %C4%81 ā ā [OoR]
Ē %c4%92 %u0112 %c4%92 %C4%92 %C4%92 Ē Ē [OoR]
ē %c4%93 %u0113 %c4%93 %C4%93 %C4%93 ē ē [OoR]
Ī %c4%aa %u012a %c4%aa %C4%AA %C4%AA Ī Ī [OoR]
ī %c4%ab %u012b %c4%ab %C4%AB %C4%AB ī ī [OoR]
Ō %c5%8c %u014c %c5%8c %C5%8C %C5%8C Ō Ō [OoR]
ō %c5%8d %u014d %c5%8d %C5%8D %C5%8D ō ō [OoR]
Ū %c5%aa %u016a %c5%aa %C5%AA %C5%AA Ū Ū [OoR]
ū %c5%ab %u016b %c5%ab %C5%AB %C5%AB ū ū [OoR]
这些列表示编码如下:
UrlEncoded:HttpUtility.UrlEncode
UrlEncodedUnicode:HttpUtility.UrlEncodeUnicode
UrlPathEncoded:HttpUtility.UrlPathEncode
转义数据字符串:Uri.EscapeDataString
EscapedUriString: Uri.EscapeUriString
HtmlEncode:HttpUtility.HtmlEncode
HtmlAttributeEncode:HttpUtility.HtmlAttributeEncode
HexEscape:Uri.HexEscape
笔记:
HexEscape 只能处理前 255 个字符。因此,它会为拉丁 A 扩展字符(例如 Ā)抛出 ArgumentOutOfRange 异常。
我表中的字符没有完全按照 ASCII/Unicode 升序排列(例如 [、]、\ 是乱序的)。
您可能想查看使用 C#将这些字符转换为可发布数据的 URLEncode URL Encoding
尝试将<meta charset='utf-8'>
或添加<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
到您的页面标签。
还要检查您网站的 web.config 以查看那里设置了哪些全球化设置。明确设置为 utf-8 可能会有所帮助。
参考:http: //msdn.microsoft.com/en-us/library/39d1w2xf.aspx
基本的 http url 编码会将你的 $ 换成 %24,但这听起来不像是这里的问题。您可能想要使用 URLEncode,然后在另一端对其进行解码。或者,如果您将其作为有效负载的一部分发送,您可能需要指定您正在使用的字符编码(一方面是使用 ASCII,另一个是 UTF-8 或类似的东西,你会得到垃圾作为结果)。