如何测试一个字符串是否是有效的UTF16字符串?
我正在使用 mongodb 和 javascript 进行一些字符串处理。现在我遇到了一些错误,例如:
5 月 23 日星期日 07:42:20 断言失败 JS_EncodeCharacters( _context , s , srclen , dst , &len) scripting/engine_spidermonkey.cpp 152
0x80f4f7e 0x80f8794 0x811525b 0x811a953 0x8119fc4 0x8111bc5 0x81b408e 0x81c4ee7 0x81b4a10 0x817a881 0x817a7d8 0x817a6e2 0x81 1e1bb 0x80a777b 0x80a8f8a 0xb7cb2455 0x80a37a1
mongodb-linux-i686-1.4.2/bin/mongo(_ZN5mongo12sayDbContextEPKc+0xfe) [0x80f4f7e]
经过一番谷歌搜索后,我发现如果输入不是有效的UTF16字符串,JS_EncodeCharacters会返回false。 (如果 Spidermonkey 是在启用 UTF-8 的情况下构建的)
所以我想知道如何测试输入字符串是否是正确的 UTF16 字符串?所以我可以跳过这种字符串以避免出现问题...
谢谢
I am using mongodb and javascript to do some string processing. Now I got some error like:
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]
After doing some google, I find that JS_EncodeCharacters return false if the input is not a valid UTF16 string. (if spidermonkey is build with UTF-8 enabled)
So I was wondering how to test if the input string if a proper UTF16 string? so I can skip such kind of string to avoid problem ...
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
UTF-16 常见问题解答的这一部分描述了无效字符的序列:
如果你在 Javascript 中执行此操作,我不确定测试是否会那么容易,但......
This part of the UTF-16 FAQ describes the sequences of invalid characters:
If you're doing this in Javascript, I'm not sure it'll be all that easy to test for this, though...
String.prototype.isWellFormed()
方法返回一个布尔值,指示字符串是否不包含任何单独(不匹配)代理项。The
String.prototype.isWellFormed()
method returns a boolean indicating whether the string does not contain any lone (unmatched) surrogates.