Javascript UTF-8 и функция длины - PullRequest
4 голосов
/ 03 октября 2009

Я пытаюсь создать подстроку в строке UTF-8, например हिन्दी.

Проблема в том, что он полностью облажался => с какой-то странной коробкой в ​​конце (здесь не отображается, хотя я скопировал вставленную) (это что-то вроде [00 02]): हिन ...

Хорошо, вот как это происходит после использования функции substr:

альтернативный текст http://img27.imageshack.us/img27/765/capturexv.png

Хотите знать, есть ли какая-нибудь функция для решения этой проблемы? По крайней мере, я хочу убрать эту забавную коробочку.

Спасибо за ваше время.

Ответы [ 3 ]

2 голосов
/ 04 октября 2009

JavaScript кодирует строки с помощью UTF-16, то есть символы вне базовой многоязычной плоскости должны быть представлены в виде суррогатной пары. Расщепление строки в середине такой пары может объяснить ваши результаты.

Как я понимаю из статьи википедии , вам придется проверить, находится ли ваш последний символ в диапазоне 0xD800–0xDBFF, и, если это так, либо удалить его, либо добавить следующий символ (который должен быть в диапазоне 0xDC00-0xDFFF) до подстроки.

0 голосов
/ 03 октября 2009

Старайтесь не помещать последовательности байтов UTF-8 в строковые объекты JavaScript. Вместо этого полагайтесь на поддержку Unicode в JavaScript и используйте правильную строку Unicode (вместо строки UTF-8).

Я предполагаю, что вам удалось нарезать строку в середине символа, так что в результате получается неполный символ. Затем браузер все равно пытается отрендерить его, что приводит к moji-bake.

0 голосов
/ 03 октября 2009

Я считаю, что поле - это представление шрифта значений UTF-8, созданных подстрокой. Попробуйте убрать персонажа с позиции бокса, и он должен быть удален.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...