如何测试一个字符串是否是有效的UTF16字符串?

发布于 2024-09-02 18:44:53 字数 678 浏览 3 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

薄荷梦 2024-09-09 18:44:53

UTF-16 常见问题解答的这一部分描述了无效字符的序列:

FFFE16和FFFF16两个值以及FDD016到FDEF16的32个值> 代表非字符。它们在互换时无效,但可以在实现内部自由使用。不成对的代理也是无效的,即 D80016 到 DBFF16 范围内的任何值后面都没有 DC0016 到 DC0016 范围内的值。 DFFF16,或 DC0016 到 DFFF16 范围内的任何值,且前面没有 D80016 范围内的值子> 到 DBFF16

如果你在 Javascript 中执行此操作,我不确定测试是否会那么容易,但......

This part of the UTF-16 FAQ describes the sequences of invalid characters:

The two values FFFE16 and FFFF16 as well as the 32 values from FDD016 to FDEF16 represent noncharacters. They are invalid in interchange, but may be freely used internal to an implementation. Unpaired surrogates are invalid as well, i.e. any value in the range D80016 to DBFF16 not followed by a value in the range DC0016 to DFFF16, or any value in the range DC0016 to DFFF16 not preceded by a value in the range D80016 to DBFF16.

If you're doing this in Javascript, I'm not sure it'll be all that easy to test for this, though...

微暖i 2024-09-09 18:44:53

String.prototype.isWellFormed() 方法返回一个布尔值,指示字符串是否不包含任何单独(不匹配)代理项

The String.prototype.isWellFormed() method returns a boolean indicating whether the string does not contain any lone (unmatched) surrogates.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文