当我使用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
答案 0 :(得分:3)
解决了问题。
正如McDowell之前提到的,问题在于编码设置。解决此问题的最佳方法是从WTK声明编码信息。
在您的工作目录中,找到ktools.properties文件('workdir \ wtklib \ ktools.properties'或'workdir \ wtklib \ Linux \ ktools.properties',就像在我的机器上一样)。并添加以下行:
microedition.encoding= *encoding*
对于ASCII编码:
microedition.encoding=ISO8859_1
那将完成这项工作(:
答案 1 :(得分:2)
我猜这是因为你要么:
String(byte[])
构造函数(通常应避免使用此构造函数)String(byte[], String)
构造函数在这两种情况下,您都会使用错误的编码将字节数据解码为字符数据,这是一种编码,其中字节值10010111
是非法的(至少作为第一个字节)。
从byte
数据到char
数据的任何转换(例如创建字符串)都将涉及将数据从“其他一些编码”转换为UTF- 16。您需要知道并指定执行此转换之前“其他编码”的内容。