2011-04-13 191 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。