2015-10-06 22 views
0

我有一个WebSocket,它将文本字符串从不同的服务传递到我的页面。其中一些字符串包含奇怪的字符。查找字符串中的十六进制(windows1252)字符串并将其转换 - Javascript

有时候,我收到这样的字符串:

“的东西的东西%91quoted东西%92的东西”

和类似。我发现这个特定的服务在windows-1252(或CP1252)字符集中向我发送字符串。

哪一个是最好(最快)的方式,用javascript,我的所有字符串在UTF-8或只是为了转换十六进制字符?

+0

您可以发布您的代码?你可以使用'str.replace()'函数。 – Ciprian

+0

所以你建议做一个“cp1252”的地图,只需使用str.replace?我没有任何代码,因为我尝试了“htmlentities”,使用“decodeURIComponent”ecc ecc。你知道我最终能找到一个比较表来复制并用作地图吗? – Plastic

+0

请参阅下面的答案。 – Ciprian

回答

0

我决定回答自己的事业还没有一个完整的但在同时,我想通了。 感谢@Ciprian链接到字符映射,并感谢@gre_gor提供替换函数的建议。

我无法找到一个完整的地图来复制,所以我不得不合并其中的一些建立在互联网上,使我自己,我还写了一个函数来“编码”,我想分享它的情况下别人需要它。

function cp1252_to_utf8(txt) { 
var chars_map = { 
    "21": "!", "22": '"', "23": "#", "24": "$", "25": "%", "26": "&", "27": "'", "28": "(", "29": ")", "2a": "*", "2b": "+", "2c": ",", 
    "2d": "-", "2e": ".", "2f": "/", "30": "0", "31": "1", "32": "2", "33": "3", "34": "4", "35": "5", "36": "6", "37": "7", "38": "8", 
    "39": "9", "3a": ":", "3b": ";", "3c": "<", "3d": "=", "3e": ">", "3f": "?", "40": "@", "41": "A", "42": "B", "43": "C", "44": "D", 
    "45": "E", "46": "F", "47": "G", "48": "H", "49": "I", "4a": "J", "4b": "K", "4c": "L", "4d": "M", "4e": "N", "4f": "O", "50": "P", 
    "51": "Q", "52": "R", "53": "S", "54": "T", "55": "U", "56": "V", "57": "W", "58": "X", "59": "Y", "5a": "Z", "5b": "[", "5c": "\\", 
    "5d": "]", "5e": "^", "5f": "_", "60": "`", "61": "a", "62": "b", "63": "c", "64": "d", "65": "e", "66": "f", "67": "g", "68": "h", 
    "69": "i", "6a": "j", "6b": "k", "6c": "l", "6d": "m", "6e": "n", "6f": "o", "70": "p", "71": "q", "72": "r", "73": "s", "74": "t", 
    "75": "u", "76": "v", "77": "w", "78": "x", "79": "y", "7a": "z", "7b": "{", "7c": "|", "7d": "}", "7e": "~", "a1": "¡", "a2": "¢", 
    "a3": "£", "a4": "¤", "a5": "¥", "a6": "¦", "a7": "§", "a8": "¨", "a9": "©", "aa": "ª", "ab": "«", "ac": "¬", "a0": " ", "ae": "®", 
    "af": "¯", "ad": " ", "b0": "°", "b1": "±", "b2": "²", "b3": "³", "b4": "´", "b5": "µ", "b6": "¶", "b7": "·", "b8": "¸", "b9": "¹", 
    "ba": "º", "bb": "»", "bc": "¼", "bd": "½", "be": "¾", "bf": "¿", "c0": "À", "c1": "Á", "c2": "Â", "c3": "Ã", "c4": "Ä", "c5": "Å", 
    "c6": "Æ", "c7": "Ç", "c8": "È", "c9": "É", "ca": "Ê", "cb": "Ë", "cc": "Ì", "cd": "Í", "ce": "Î", "cf": "Ï", "d0": "Ð", "d1": "Ñ", 
    "d2": "Ò", "d3": "Ó", "d4": "Ô", "d5": "Õ", "d6": "Ö", "d7": "×", "d8": "Ø", "d9": "Ù", "da": "Ú", "db": "Û", "dc": "Ü", "dd": "Ý", 
    "de": "Þ", "df": "ß", "e0": "à", "e1": "á", "e2": "â", "e3": "ã", "e4": "ä", "e5": "å", "e6": "æ", "e7": "ç", "e8": "è", "e9": "é", 
    "ea": "ê", "eb": "ë", "ec": "ì", "ed": "í", "ee": "î", "ef": "ï", "f0": "ð", "f1": "ñ", "f2": "ò", "f3": "ó", "f4": "ô", "f5": "õ", 
    "f6": "ö", "f7": "÷", "f8": "ø", "f9": "ù", "fa": "ú", "fb": "û", "fc": "ü", "fd": "ý", "fe": "þ", "ff": "ÿ", "91": "‘", "92": "’", 
    "80": "€", "83": "ƒ", "85": "…", "86": "†", "87": "‡", "88": "ˆ", "89": "‰", "8a": "Š", "8b": "‹", "8c": "Œ", "8e": "Ž", "93": "“", 
    "94": "”", "95": "•", "96": "–", "97": "—", "98": "˜", "99": "™", "9a": "š", "9b": "›", "9c": "œ", "9e": "ž", "9f": "Ÿ" 
}; 
return txt.replace(/%([0-9abcdef]{2})/ig, function (match, code) { 
    return chars_map[code]; 
}); 
} 

很明显我们好像被使用:

var utf8_txt = cp1252_to_utf8(cp1552_txt); 

我希望这将是有用的人

1

Looks li ke你有percent encodedWindows-1252个字符。

如果您从Windows-1252代码创建的映射为Unicode字符,则可以用replace替换它们。

var win1252toUnicode = { 
    ... 
    91:"‘", 
    92:"’", 
    ... 
}; 
var encoded = "stuff stuff %91quoted stuff%92 stuff"; 
var decoded = encoded.replace(/%([0-9abcdef]{2})/ig, function(match, code) { 
    return win1252toUnicode[code]; 
}) 

有了这个,你得到:

"stuff stuff ‘quoted stuff’ stuff" 
0
function cp1252_to_utf8(txt) { 
    return txt.replace(/%[0-9abcdef]{2}/gi, hex => { 
     return String.fromCharCode(parseInt(hex.replace('%', ''), 16)); 
    }); 
} 
+0

由于其长度和内容,您的答案被标记为低质量。请考虑解释你的代码的作用。 –

+0

虽然答案总是值得赞赏的,但它确实有助于提供关于您的代码如何解决手头问题的一些信息。不是每个人都可能熟悉你的确切编码逻辑,但可以理解你的一般*方法*或*概念*。为了帮助改进您的答案,请提供一些[**围绕您的答案**的上下文](https://meta.stackexchange.com/questions/114762),并参阅关于[**写出重要答案**的帮助文章] (http://stackoverflow.com/help/how-to-answer)关于如何让你的答案数:)的一些提示 –

相关问题