需要将UTF-8字符串编码规范化为组合字符

时间:2016-11-29 13:45:02

标签: javascript python url utf-8

所以我有一些像í,ñ等字符,这些字符在XML文档的URL字符串中进行了百分比编码。我需要以编程方式将它们从组合形式(例如i%CC%81)转换为其组合的UTF-8字符等效项(在这种情况下为%C3%AD)。

非常友好地向我指出关于如何在iOS中执行此操作的same question(您不能,您必须创建自己的查找表)and C#(显然您可以这样做在C#中具有内置功能的一般情况下。

我需要能够在python 3.x中完成,最好是JavaScript。到目前为止,我已经尝试unquote / decodeURI字符串,然后重新编码,但显然字符并不完全等效,因为变换是无损的(我从任何一种形式开始都返回原始字符串)。

在一般情况下是否有这样做或者我是否需要构建自己的查找表和替换函数?另外,这是一个示例URL:

file:///some/file/path/3-05%20Melodi%CC%81a%20de%20la%20montan%CC%83a%20.m4a

(显然我没有使用XML部分)。

更新

使用Christoph的答案让我得到了python解决方案,并让我找到了JavaScript(注意它是一个ES 2015功能,只有平均浏览器支持,没有IE和Safari 10)。

1 个答案:

答案 0 :(得分:1)

在python3中,urllib.quote已移至urllib.parse,但您实际上正在寻找unicodedata.normalize()

来自默认的python3字符串

import urllib.parse
import unicodedata

s = "î"
print (urllib.parse.quote(s))
> %C3%AE

s = unicodedata.normalize("NFC",s)
print (urllib.parse.quote(s))

> %C3%AD

在我看来非常像你正在寻找的结果。