2009-10-03 2 views
3

Я пытаюсь сделать substr в строке UTF-8, например हिन्दी.Javascript utf-8 substr и length function

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

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

alt text http://img27.imageshack.us/img27/765/capturexv.png

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

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

+0

Какая из юникод-самолетов эти символы? Возможно, вы разделили суррогатную пару ... – Christoph

ответ

2

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

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

0

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

+0

Но я не знаю, появится ли окно каждый раз или нет. Я не могу случайно удалить последнего персонажа. Текст в конечном итоге будет динамичным. –

+0

Попробуйте шрифт, совместимый с языком, на котором вы кодируете? Он должен отображать правильное представление каждый раз. На большинстве специальных языков используется определенный шрифт, попробуйте googling для «языкового шрифта utf-8» или чего-то подобного. – Zolomon

+0

@ Zolomon, thats not correct, потому что вы можете видеть, что первые несколько букв слова отображаются правильно. и только после substr появляется коробка. –

0

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

Я предполагаю, что вам удалось срезать строку в середине символа, чтобы результат был неполным. Браузер затем попытается отобразить его в любом случае, что приведет к выпечке Моджи.

+0

Итак, с «правильной строкой Unicode» вы имеете в виду UTF-16? – Gumbo

+0

Да, что вы подразумеваете под поддержкой Unicode Javascript? Правильная строка юникода? –