关于字符集编码和ICU4C的问题

时间:2011-03-07 10:02:53

标签: android icu

我在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非常复杂,任何人都可以告诉我跟踪这个问题的任何线索吗? 或者我该如何跟踪问题?

非常感谢。

3 个答案:

答案 0 :(得分:0)

这个问题仍然没有解决,我会提供更多信息,希望有人可以提供帮助。

  1. 通过一些调试,我发现GB18030不受支持,因为GB18030的编号器不可用。

  2. 在'/android_root/source/external/icu4c/stubdata/readme.txt'中,可用 可以看到Android上的转换器(没有GB18030转换器):

    • cnv / * .cnv是Android所需的附加编码。 这些是
    • GSM-03.38-2000.cnv
    • 异8859_16-2001.cnv
    • DoCoMo公司-shift_jis访问-2007.cnv
    • KDDI-jisx-208-2007.cnv
    • KDDI-shift_jis访问-2007.cnv
    • 软银-jisx-208-2007.cnv
    • 软银-shift_jis访问-2007.cnv
  3. 所以这主要是构建问题,有没有人知道如何在Android上构建ICU4C以及如何添加gb18030转换器?

    我正在尝试构建ICU4C,但尚未成功。

答案 1 :(得分:0)

我已经解决了这个问题。 实际上,这是一个构建问题,不是由ICU4C引起的。 在make文件中,必须设置PRODUCT_LOCALE。然后在构建之后,CTS可以通过。

答案 2 :(得分:0)

我用icu 4.6版做了这个。从android.mk中的dir“common”.c和.cpp文件下载icu并绑定所有代码。创建一个静态库,并使用application.mk中的以下标志对其进行编译。

APP_CPPFLAGS:= -DU_COMMON_IMPLEMENTATION -DU_STATIC_IMPLEMENTATION -DU_PALMOS APP_CFLAGS:= -DU_COMMON_IMPLEMENTATION -DU_STATIC_IMPLEMENTATION -DU_PALMOS

我发现平台头文件“ppalmos.h”正在运行,因此上面的预处理器指令“U_PALMOS”。

Makusi