关于字符集编码和ICU4C的问题
我在 Android 产品设备上运行 CTS(基本代码是 android 2.3),但以下情况失败:
java.io.UnsupportedEncodingException: GB18030 at java.nio.charset.Charset.forNameUEE(Charset.java:317)
at java.nio.charset.Charset.forNameUEE(Charset.java:317)
at java.lang.String.getBytes(String.java:973)
at org.apache.harmony.luni.tests.java.lang.StringBufferTest.test_toString(StringBufferTest.java:101)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
at java.nio.charset.Charset.forName(Charset.java:304)
at java.nio.charset.Charset.forNameUEE(Charset.java:315)
at java.nio.charset.Charset.forNameUEE(Charset.java:317)
at java.lang.String.getBytes(String.java:973)
at org.apache.harmony.luni.tests.java.lang.StringBufferTest.test_toString(StringBufferTest.java:101)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
at java.nio.charset.Charset.forName(Charset.java:304)
at java.nio.charset.Charset.forNameUEE(Charset.java:315)
当我在 Android SDK 2.3.3 模拟器上运行相同的测试时,它通过了。
然后我比较了android 2.3.3和我的代码之间的源代码,没有什么不同。 但我想一定有什么不一样的地方是我没有注意到的。 然后我发现这个问题与 ICU4C 相关,但是 ICU4C 非常复杂,有人可以告诉我任何线索来跟踪这个问题吗? 或者我应该如何继续跟踪该问题?
非常感谢。
I'm running CTS on an android product device(the base code is android 2.3), but the following case failed:
java.io.UnsupportedEncodingException: GB18030 at java.nio.charset.Charset.forNameUEE(Charset.java:317)
at java.nio.charset.Charset.forNameUEE(Charset.java:317)
at java.lang.String.getBytes(String.java:973)
at org.apache.harmony.luni.tests.java.lang.StringBufferTest.test_toString(StringBufferTest.java:101)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
at java.nio.charset.Charset.forName(Charset.java:304)
at java.nio.charset.Charset.forNameUEE(Charset.java:315)
at java.nio.charset.Charset.forNameUEE(Charset.java:317)
at java.lang.String.getBytes(String.java:973)
at org.apache.harmony.luni.tests.java.lang.StringBufferTest.test_toString(StringBufferTest.java:101)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
at java.nio.charset.Charset.forName(Charset.java:304)
at java.nio.charset.Charset.forNameUEE(Charset.java:315)
While I run the same test on Android SDK 2.3.3 emulator, it passed.
Then I compared the source code between android 2.3.3 and my code, nothing different.
But I think there must be something different that I have not noticed.
I then found this issue is ICU4C related, but ICU4C is very complicated, could any one tell me any clue to track this issue?
Or how should I proceed to track the issue?
Thanks very much.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这个问题还没有解决,我将提供更多信息希望有人能提供帮助。
通过一些调试,我发现不支持GB18030,因为GB18030转换器不可用。
在'/android_root/source/external/icu4c/stubdata/readme.txt'中,可用
可以看到Android上的转换器(没有GB18030转换器):
这些是
所以这主要是一个构建问题,有谁知道如何在Android上构建ICU4C以及如何添加gb18030转换器?
我正在尝试构建 ICU4C,但尚未成功。
This issue still not fixed, I will provide more info hope some one can help.
By some debuging, I find that GB18030 is not supported because GB18030 conventer is not available.
In '/android_root/source/external/icu4c/stubdata/readme.txt', the available
converters on Android can be seen( no GB18030 converter):
These are
So this is mainly a build issue, does any one know how to build ICU4C on Android and how to add the gb18030 converter?
I am trying to build ICU4C, but not succeed yet.
我已经解决了这个问题。
事实上,这是一个构建问题,而不是 ICU4C 引起的。
在 make 文件中,必须设置 PRODUCT_LOCALE。建成后,CTS就可以通过了。
I have resolved this question.
In fact, this is a build issue, not caused by ICU4C.
In the make file, a PRODUCT_LOCALE must be set. Then after built, the CTS can pass.
我已经用 icu 4.6 版本做到了这一点。下载 icu 并绑定 android.mk 中“common”目录中的 .c 和 .cpp 文件中的所有代码。创建一个静态库并在 application.mk 中使用以下标志对其进行编译。
APP_CPPFLAGS := -DU_COMMON_实施 -DU_STATIC_实施 -DU_PALMOS
APP_CFLAGS := -DU_COMMON_IMPLMENTATION -DU_STATIC_IMPLMENTATION -DU_PALMOS
我发现平台头文件“ppalmos.h”正在工作,因此上面的预处理器指令“U_PALMOS”。
马库西
I have done this with icu version 4.6. Download icu und bind all code from the dir "common" .c and .cpp files in your android.mk. Make a static library and compile it with the following flags inside application.mk.
APP_CPPFLAGS := -DU_COMMON_IMPLEMENTATION -DU_STATIC_IMPLEMENTATION -DU_PALMOS
APP_CFLAGS := -DU_COMMON_IMPLEMENTATION -DU_STATIC_IMPLEMENTATION -DU_PALMOS
I found that the platform header file "ppalmos.h" is working and therefore the above preprocessor directive "U_PALMOS".
Makusi