Как проверить, является ли строка допустимой строкой UTF16? - PullRequest
1 голос
/ 23 мая 2010

Я использую mongodb и javascript для обработки строк.Теперь у меня есть какая-то ошибка, например:

Sun May 23 07:42:20 Assertion failure JS_EncodeCharacters( _context , s , srclen , dst , &len) scripting/engine_spidermonkey.cpp 152<br> 0x80f4f7e 0x80f8794 0x811525b 0x811a953 0x8119fc4 0x8111bc5 0x81b408e 0x81c4ee7 0x81b4a10 0x817a881 0x817a7d8 0x817a6e2 0x811e1bb 0x80a777b 0x80a8f8a 0xb7cb2455 0x80a37a1<br> mongodb-linux-i686-1.4.2/bin/mongo(_ZN5mongo12sayDbContextEPKc+0xfe) [0x80f4f7e]

После того, как я поработал с Google, я обнаружил, что JS_EncodeCharacters возвращает false, если ввод не является допустимой строкой UTF16.(если spidermonkey собирается с включенным UTF-8)

Поэтому мне было интересно, как проверить, является ли входная строка правильной строкой UTF16?так что я могу пропустить такую ​​строку, чтобы избежать проблем ...

Спасибо

1 Ответ

2 голосов
/ 23 мая 2010

Эта часть UTF-16 FAQ описывает последовательности недопустимых символов:

Два значения FFFE 16 и FFFF 16 , а также 32 значения от FDD0 16 до FDEF 16 представляют нехарактеры. Они недопустимы при обмене, но могут свободно использоваться внутри реализации. Непарные суррогаты также недопустимы, т. Е. Любое значение в диапазоне от D800 16 до DBFF 16 , за которым не следует значение в диапазоне DC00 16 до DFFF 16 или любое значение в диапазоне DC00 16 до DFFF 16 , которому не предшествует значение в диапазоне D800 16 до DBFF 16 .

Если вы делаете это в Javascript, я не уверен, что это будет так просто проверить, хотя ...

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