2015-07-17 1 views
1
มอเตอร์ไซค์ 

Можно ли преобразовать этот юникод в строку с помощью JS. (Это Таиланд Language)Преобразование этого unicode в строку с javascript (тайский язык)

Я использую

console.log(String.fromCharCode("มอเตอร์ไซค์")); 

И это не правильно. если он прав, он покажет มอเตอร์ไซค์

+0

Что показывает сейчас? –

ответ

4

Ваша строка в Юникоде закодирована с использованием нотации объекта HTML. Как правило, это означает, что независимо от того, что закодирована строка, ожидается, что она окажется в середине документа HTML, где это будет видно HTML-парсером.

Если вы каким-то образом получил эту строку в JavaScript в браузере, вы можете получить в кодированном Unicode, позволяя браузер разобрать его:

var str = "มอเตอร์ไซค์"; 
 
var elem = document.createElement("div"); 
 
elem.innerHTML = str; 
 
alert(elem.textContent);

string.fromCharCode() функция ожидает один или более числовые аргументы; он не будет понимать объекты HTML. Таким образом, если вы не в браузере (как, если у вас есть строка в программе Node.js или что-то подобное), вы можете преобразовать строку с собственным кодом:

var str = "มอเตอร์ไซค์"; 
var thai = String.fromCharCode.apply(String, str.match(/x[^;]*;/g).map(function(n) { return parseInt(n.slice(1, -1), 16); })); 

Это преобразование будет работать только тогда, когда задействованы кодовые точки в пределах первых значений 64K.

+0

Обратите внимание, что '.textContent' может работать не везде; в IE вам, возможно, придется использовать '.innerText' вместо этого, по крайней мере, в более старых версиях. – Pointy

+0

Большое спасибо. Это работает. –

2

Вы можете что-то вроде этого:

var input = "มอเตอร์ไซค์"; 

var output = input.replace(/&#x[0-9A-Fa-f]+;/g, 
          function(htmlCode) { 
           var codePoint = parseInt(htmlCode.slice(3, -1), 16); 
           return String.fromCharCode(codePoint); 
          }); 
+0

извините, я поскользнулся на базе 16 в parseInt, необходимо было отредактировать –

+0

Спасибо. Он тоже работает. –

Смежные вопросы