当我使用 Java Wireless 工具包运行 midlet 时,midlet 运行正确,但是当它尝试解析文本字段时,会发生以下错误;

java.lang.RuntimeException: IOException reading reader invalid first byte 10010111
    at com.sun.cldc.i18n.Helper.byteToCharArray(+228)
    at com.sun.cldc.i18n.Helper.byteToCharArray(+9)
    at java.lang.String.<init>(+7)
    at z.a(+219)
    at z.a(+103)
    at DP4JPhone.a(+74)
    at DP4JPhone.a(+115)
    at DP4JPhone.commandAction(+120)
    at javax.microedition.lcdui.Display$DisplayAccessor.commandAction(+282)
    at javax.microedition.lcdui.Display$DisplayManagerImpl.commandAction(+10)
    at com.sun.midp.lcdui.DefaultEventHandler.commandEvent(+68)
    at com.sun.midp.lcdui.AutomatedEventHandler.commandEvent(+47)
    at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.handleVmEvent(+186)
    at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.run(+57)

问题是什么?

我正在使用 JWT 2.5.2_01

有帮助吗?

解决方案

问题解决了。

如道尔前面提到的,问题是有关编码的设置。克服这个问题的最好的方法是从声明WTK编码信息。

在您的工作目录,找到ktools.properties文件( 'WORKDIR \ wtklib \ ktools.properties' 或 'WORKDIR \ wtklib \ Linux的\ ktools.properties' 因为是我的机器上)。和添加下列行:

microedition.encoding= *encoding*

有关ASCII编码:

microedition.encoding=ISO8859_1

这将做的工作(:

其他提示

我猜这是因为你是:

  • 使用 String(byte[]) 构造函数(通常应避免使用此构造函数)
  • 使用 String(byte[], String) 构造函数不正确

在这两种情况下,您都会使用错误的编码将字节数据解码为字符数据,该编码中字节值 10010111 是非法的(至少作为第一个字节)。

任何转换自 byte 数据到 char 数据(例如创建字符串)将涉及数据的转换 “一些其他编码” 到 UTF-16。您需要知道并具体说明那是什么 “一些其他编码” 在执行此转换之前。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top