我正在尝试使用Java和JNI创建用于身份验证的DLL。
为了创建DLL,我创建了一个Win32应用程序,其字符集和运行时库信息分别是多字节字符串和多线程(/ MT)。
我在WinXP上使用有效和无效的用户凭据测试了DLL。两者都很好。
我需要知道同一个DLL是否也适用于中文/日文环境。
任何人都可以帮我解决这个问题吗?
提前致谢。
此致
Jegan K S
答案 0 :(得分:1)
如果您只将字符串视为blob,它应该可以正常工作。当你开始访问它们“char-by-char”(即逐字节)时,如果你认为C char是一个完整的字符,那么事情可能会出错。同样,如果你假设你可以将中间的字符串拆分成两个子字符串,那么它可能会出错等等。
另外,问题是如何将Java字符串转换为这样的多字节字符串;有正确和错误的方法。
答案 1 :(得分:1)
马丁写的是真的:
它应该可以正常工作,如果你只是 将字符串视为blob。你几时开始 访问它们“char-by-char”(即 逐字节),事情可能会出错 如果你假设C char是完整的 柴拉特。同样,如果你认为你 可以在中间分割字符串 进入两个子串,它可能会去 错了,等等。
但它比那更糟糕。在日语或中文系统上运行只会使更可能您的代码将遇到多字节(非ASCII)文本。即使在美国英语系统上运行(最简单的情况),您的代码完全有可能遇到多字节(非ASCII)文本。不要假设默认情况下用户界面中使用的字符串是您可能遇到的限制。
另请注意,将项目转换为“Unicode”(正如Microsoft所称)将无济于事,因为Microsoft选择的Unicode编码是UTF-16,它有类似的问题(不太常见)。 (在UTF-16中,要注意的术语是“代理对”。)
文字处理很难。我们去买东西吧!