2011-04-13 194 views
1

我想在JavaScript中混合使用两种不同的第三方服务,并且我得到了某些字符集中的字符串,我需要将其转换为Javascript中的其他字符集。将Unicode转换为UTF8

例如,字符串是tést。

我给出了这样的编码字符串:te%u0301st。重音编码为%u0301。我需要以某种方式将其转换为以下字符串:t%C3%A9st其中é编码为%C3%A9。我如何将e%u0301转换为JavaScript中的%C3%A9?

感谢

+2

你能提供更多关于输入编码的信息吗?它看起来像你试图产生URI编码的UTF-8(给定UTF-8八位字节的百分比编码)。输入字符串的格式是什么? '%u'后跟4个十六进制数字,4-6个十六进制数字?或者你只是试图用Unicode代码点U + 0301来表示一个字符串,使用Javascript吗?你是否有意尝试对字符串进行规范化并对其进行代码转换(将口音与预先组合的字符组合)? – 2011-04-13 22:14:27

回答

2

你似乎是试图正常化你的输入,大概以Unicode范式C.我不知道有什么简单的方法在Javascript中做到这一点;你可能需要自己实现normalization algorithm,或找到一个这样做的库。

编辑删除回答错误的问题

+0

我的字符串实际上是“tést”。只有在运行escape()时,我才能看到é用%u unicode代码点编码。我需要以某种方式转换字符串的编码,以便在其上运行escape()生成%C3编码。我很抱歉,我不知道我需要的最终编码的正确术语。我基本上仍然需要字符串“tést”,但我需要é编码不同。那有意义吗?我试着运行你的代码,但它只是把它转换成一个循环,回到我以前的同样的东西。 – Jake 2011-04-15 18:44:04

+0

@Jake Ah,好的。我错误地想知道你在做什么。这听起来像你实际上只是试图规范化你的字符串在正常形式C,而不是逃避或unescape他们(你只是用它来演示实际的代码点发生在字符串中)。 – 2011-04-15 19:17:39

0

如果你需要的是任何网址转义Unicode编码,这将这样的伎俩:

function convert(s) { 
    function parse(a, c) { 
    return String.fromCharCode(parseInt(c, 16)); 
    } 
    return encodeURIComponent(s.replace(/%u([0-f]{4})/gi, parse)); 
} 

convert('te%u0301st'); // => te%CC%81st 

如果你特别需要正常形式C,你需要自己实现大量的Unicode智能,因为在JavaScript中,'te\u0301st'.length(或'tést'.length)的值为5。