2013-04-10 44 views
1

我需要通过HTTP发送短信Post with一些特殊字符,如“caiò”Hwo可以得到Encoding.GetEncoding(“iso-8859-1”)十六进制代码?

所以,用我的代码,我尝试在ISO-8859-1中转换我的字符串。

基本上,如果我的字符串在ISO-8859-1中被转换,并且在它上面调用了方法Uri.EscapeDataString(),代替“ò”我应该有“F2”十六进制代码。但是我得到%C3%A0,即UTF8编码的十六进制代码。

 Encoding iso = Encoding.etEncoding("ISO-8859-1"); 

       string StringBody = iso.GetString(iso.GetBytes(Body)); 

    UrlParameter += "&data=" + Uri.EscapeDataString(StringBody); 
+0

我不确定你在这里试图做什么,但iso.GetString(解码)和iso.GetBytes(编码)相互抵消。 – 2013-04-10 18:36:23

+0

谢谢你的帮助。你知道吗,我怎样才能采取特殊字符ISO-8859-1十六进​​制代码? – 2013-04-10 18:57:36

+0

我可能无法做到这一点,但如果你用Body(我假设它是一个普通的C#(Unicode)字符串)和你的UrlParameter应该得到什么的例子来增加你的问题,然后看起来像。 – 2013-04-10 20:18:16

回答

1

首先,对字符串进行编码并对其进行解码仅仅是一种毫无意义的往返行为,并且最坏的情况下会导致数据丢失。

Uri.EscapeDataString总是correctly编码为UTF-8。任何服务器都应该支持。

你可以尝试HttpUtility.UrlEncode它接受的编码参数:

Encoding iso = Encoding.getEncoding("ISO-8859-1"); 
UrlParameter += "&data=" + HttpUtility.UrlEncode(Body, iso); 
-1

相信文本API应有的Unicode支持......在你的最终文本信息的编码正确是很重要的。不过短信API应支持藏汉... API支持Unicode消息将做的工作....

这是我在PHP做了......我在没有太大的编码其他语言的有关

对不起
if ($cmd['method'] == 'POST') { 
$opts['http']['method'] = 'POST'; 
$opts['http']['header'] .= "\r\nContent-type: application/x-www-form-urlencoded"; 
$opts['http']['content'] = $post_data; 
} 

$context = stream_context_create($opts); 

我使用Innovative Text API Gateway,它提供Unicode支持,并允许我发送中文,日文,阿拉伯文和其他语言消息。