J2ME Midlet 异常:IOException 读取读取器第一个字节无效
题
当我使用 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。您需要知道并具体说明那是什么 “一些其他编码” 在执行此转换之前。
不隶属于 StackOverflow