我正在努力理解,什么是从C#中获得的最好的编码,以满足新的短信提供者的要求.
我想发送的文本是:
贝斯特·比约恩
提供程序表示需要的编码文本是:
B%E4ste+Bj%F6rn
所以ä是%E4,ö是%F6
从这个答案,我知道,对于这样的转换,我需要使用HttpUtility.HtmlAttributeEncode作为正常的HttpUtility.UrlEncode输出:
B%c3%a4ste+Bj%c3%b6rn
在手机上输出奇怪的字符:/
由于几个字符未被转换,我尝试了以下操作:
private string specialEncoding(string text)
{
StringBuilder r = new StringBuilder();
foreach (char c in text.ToCharArray())
{
string e = System.Web.HttpUtility.UrlEncode(c.ToString());
if (e.StartsWith("%") && e.ToLower() != "%0a") // %0a == Linefeed
{
string attr = System.Web.HttpUtility.HtmlAttributeEncode(c.ToString());
r.Append(attr);
}
else
{
r.Append(e);
}
}
return r.ToString();
}这样我就可以对每个字符进行断点和测试,并发现:
System.Web.HttpUtility.HtmlAttributeEncode("ä")实际上等于ä..。所以没有%E4作为输出..。
,我错过了什么,?而是否有一种简单的方式,可以在不按字符操作它们的情况下进行编码,并且具有所需的输出?
发布于 2014-03-26 10:55:27
提供者说它需要
询问提供者他们所处的年龄。根据维基百科:百分比编码
泛型URI语法要求在URI中提供字符数据表示的新URI方案必须在没有转换的情况下表示来自无保留集的字符,并且应该根据UTF-8将所有其他字符转换为字节,然后对这些值进行百分比编码。随着RFC 3986的发布,这一要求在2005年1月中被引入。在此日期之前引入的URI方案不受影响。
当然,这个RFC讨论的是“新URI方案”,HTTP显然不是,但是坚持这个标准可以防止像这样的麻烦。另见URL编码Unicode字符的正确方法是什么?。
他们似乎希望您按照Windows-1250代码页 (或类似的,如ISO-8859-1或-2,检查备选方案这里)对字符进行编码,因为使用代码页E4 (132)映射到ä和F6 (148)映射到ö。正如@Simon在他的评论中指出的那样,您应该问提供者他们到底希望您使用哪个代码页。
假设Windows1250,您可以这样实现它,根据URL编码ASCII/URL 16字符
var windows1250 = Encoding.GetEncoding(1250);
var percentEncoded = HttpUtility.UrlEncode("Bäste Björn", windows1250);percentEncoded的值是:
B%e4ste+Bj%f6rn
如果他们坚持使用大写字母,请参见.net UrlEncode -小写问题。
https://stackoverflow.com/questions/22658704
复制相似问题