将扩展ASCII字符编码转换为UTF-8字节编码

7

我正在尝试弄清楚如何对字符串进行 URL 编码,逐个字符地进行编码,而我所拥有的只是扩展 ASCII 代码。

例如,对于小于128的代码,这很简单:char "?" 的代码是63,即16进制下的3F,因此字符串 "?" 的 URL 编码为"%3F"。

那么对于大于127的 char 代码是否也可以这样做?例如 "á" 的代码是225(16进制下的E1)。是否可能从这里得到字节%C3%A1,它们组成了 "á" 的 URL 编码?如果可以,需要执行哪些操作?

编辑:我应该更具体地说明,字符集为(ISO Latin-1)。看起来我还应该更清楚地指出,这个问题涉及的是一个公式/以编程方式执行转换的方法,而不是如何使用某种语言中的某个库对 char 进行 URL 编码。


2
你说得对,“扩展ASCII码”并没有太多意义。具体的编码是什么?你可能正在使用某种编程语言和一些库。是哪些呢? - Tom Blodget
抱歉,我编辑了问题以更具体地说明字符编码。此外,这个问题不是关于一种语言或库的。有些库必须在不使用其他库的情况下实现此转换,我对它们如何实现感兴趣。 - Diogo Franco
1个回答

6
如果你的"扩展ASCII"编码是ISO-8859-1,那么你很幸运。Unicode的前255个字符(不是UTF-8编码)遵循ISO-8859-1。即 á == U+00E1
如果你使用其他编码,则没有这种好运。字符的映射是任意的,所以需要一个Rosetta石头而不是计算。
一旦你有了一个Unicode字符,你可以相对容易地使用https://www.rfc-editor.org/rfc/rfc3629中找到的规范将其编码为UTF-8。由于你的问题没有定义编程语言,因此在这里详细说明转换超出了范围。
这时百分号编码就只是将百分号编码规范应用到UTF-8字符上。
幸运的是,大多数编程语言都有内置或第三方库来进行这种转换。

1
我不会说你完全没有希望。如果你有访问iconv,你可以编程地将奇怪的编码转换为utf-8。这个函数通常在C/shell/python/php等语言中都是可用的。 - Mike Frysinger
@MikeFrysinger - OP 知道 ASCII 可以很容易地映射到 UTF-8,并想知道如何在程序中将其他字符映射到 UTF-8,可能是没有使用库的情况下。正如我上面所说的结尾段落中提到的,大多数语言都支持这一点,包括 Unicode 字符串转百分比编码函数,但这不是问题所在。 - Alastair McCormack
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Diogo Franco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接