我正在使用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]
在做了一些谷歌之后,我发现如果输入不是有效的UTF16字符串,JS_EncodeCharacters会返回false。 (如果使用UTF-8构建spidermonkey)
所以我想知道如何测试输入字符串是否是正确的UTF16字符串?所以我可以跳过这种字符串来避免问题...
由于
答案 0 :(得分:2)
This part of the UTF-16 FAQ描述了无效字符的序列:
两个值FFFE 16 和FFFF 16 以及从FDD0 16 到FDEF 16 代表非人物。它们在交换中无效,但可以在实现内部自由使用。不成对的代理也是无效的,即D800 16 到DBFF 16 范围内的任何值都没有后跟DC00 16 范围内的值DFFF 16 ,或DC00 16 至DFFF 16 范围内的任何值,前面没有D800 16范围内的值到DBFF 16 。
如果你在Javascript中这样做,我不确定为此测试会很容易,但是......