首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将"%E4“编码为”%E4“

将"%E4“编码为”%E4“
EN

Stack Overflow用户
提问于 2014-03-26 10:52:07
回答 1查看 6.6K关注 0票数 6

我正在努力理解,什么是从C#中获得的最好的编码,以满足新的短信提供者的要求.

我想发送的文本是:

贝斯特·比约恩

提供程序表示需要的编码文本是:

B%E4ste+Bj%F6rn

所以ä%E4ö%F6

从这个答案,我知道,对于这样的转换,我需要使用HttpUtility.HtmlAttributeEncode作为正常的HttpUtility.UrlEncode输出:

B%c3%a4ste+Bj%c3%b6rn

在手机上输出奇怪的字符:/

由于几个字符未被转换,我尝试了以下操作:

代码语言:javascript
复制
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作为输出..。

,我错过了什么,?而是否有一种简单的方式,可以在不按字符操作它们的情况下进行编码,并且具有所需的输出?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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字符

代码语言:javascript
复制
var windows1250 = Encoding.GetEncoding(1250);
var percentEncoded = HttpUtility.UrlEncode("Bäste Björn", windows1250);

percentEncoded的值是:

B%e4ste+Bj%f6rn

如果他们坚持使用大写字母,请参见.net UrlEncode -小写问题

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22658704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档