2013-12-20 70 views
2

我從php腳本中檢索了以下文本(其中一些是中文字符)作爲選擇選項,但無法將它們變爲可讀字符(無論是通過php還是javascript),請諮詢。通過javascript轉換Unicode字符

\\xe8\\xac\\x9b\\xe5\\x91\\xa2D\\xe3\\x80\\x82 
+0

要做到這一點,首先必須知道角色所處的位置。上述內容似乎不是UTF-16(無論是LE還是BE;如果是的話,這會很簡單)。所以這是第一件事。 –

+0

你能告訴應該是什麼結果? –

+0

正確的字符串應該是「講呢D.」 – user2499325

回答

3
input = '\xe8\xac\x9b\xe5\x91\xa2D\xe3\x80\x82' 
console.log(decodeURIComponent(escape(input))) 

這給了你到底

講呢D。 

UPDATE

如果字符串確實包含\x字符,那麼我們就可以將它們轉換成%第一個:

input = '\\xe8\\xac\\x9b\\xe5\\x91\\xa2D\\xe3\\x80\\x82' 

decodeURIComponent(input.replace(/\\x/g, '%')) 
+0

我仍然無法正確理解,但可以通過瀏覽器的控制檯看到正確的字符 http://www.imageupload.co.uk/images/2013/12/20/000.jpg – user2499325

+0

我修改了我的答案。 – punund

+0

萬分感謝,終於,我明白了!感謝所有的答覆! – user2499325

1

雖然@punund's answer是正確的,但也可以手動將字節轉換爲UTF轉換。

在Unicode字符映射中,中文字符在00000800 - 0000FFFF範圍內佔用3個字節,因此您的字節串應該按3分組並轉換爲真正的UTF字符。

這裏是一個可能的解決方案:

var str = '\\xe8\\xac\\x9b\\xe5\\x91\\xa2D\\xe3\\x80\\x82', 
    result = str.replace(/(\\{1,2}x[0-9a-f]{2}){3}/g, function(c) { 
     var u = eval('"' + c + '"'); 
     return String.fromCharCode(
      ((u.charCodeAt(0) & 15) << 12) | 
      ((u.charCodeAt(1) & 63) << 6) | 
       (u.charCodeAt(2) & 63)); 
    }); 

console.log(result); // "講呢D。" 

N.B .:同時使用evalnot recommended,在所提供的實例是完全無害的。

+0

感謝您的評論,我從線程學到了很多:) – user2499325