как протестировать, если строка является допустимой строкой UTF16?

Я использую mongodb и JavaScript, чтобы сделать некоторую строковую обработку. Теперь я получил некоторую ошибку как:

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

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

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

Спасибо

1
задан kennytm 23 May 2010 в 08:59
поделиться

1 ответ

В этой части 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, я не уверен, что это будет так легко проверить, хотя ...

2
ответ дан 3 September 2019 в 00:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: