Android 不支持HarsetException:zxing更新后的Cp437

Android 不支持HarsetException:zxing更新后的Cp437,android,zxing,Android,Zxing,我刚刚尝试将我的项目从zxing core 2.3.0升级到3.0.0,并遇到了这个字符集问题。还不确定这是一个bug还是我现在必须以某种方式提供字符集——有人能解释一下吗?我应该为此在github上打开一个问题,还是可以以任何方式提供字符集 java.lang.ExceptionInInitializerError E/AndroidRuntime( 4287): at com.google.zxing.pdf417.encoder.PDF417.<init>(PDF417.

我刚刚尝试将我的项目从zxing core 2.3.0升级到3.0.0,并遇到了这个字符集问题。还不确定这是一个bug还是我现在必须以某种方式提供字符集——有人能解释一下吗?我应该为此在github上打开一个问题,还是可以以任何方式提供字符集

java.lang.ExceptionInInitializerError
E/AndroidRuntime( 4287):    at com.google.zxing.pdf417.encoder.PDF417.<init>(PDF417.java:531)
E/AndroidRuntime( 4287):    at com.google.zxing.pdf417.encoder.PDF417.<init>(PDF417.java:525)
E/AndroidRuntime( 4287):    at com.google.zxing.pdf417.PDF417Writer.encode(PDF417Writer.java:52)
E/AndroidRuntime( 4287):    at com.google.zxing.MultiFormatWriter.encode(MultiFormatWriter.java:94)
E/AndroidRuntime( 4287):    at com.google.zxing.MultiFormatWriter.encode(MultiFormatWriter.java:47)
E/AndroidRuntime( 4287):    at org.ligi.passandroid.helper.BarcodeHelper.getBitMatrix(BarcodeHelper.java:51)
E/AndroidRuntime( 4287):    at org.ligi.passandroid.helper.BarcodeHelper.generateBarCodeBitmap(BarcodeHelper.java:23)
E/AndroidRuntime( 4287):    at org.ligi.passandroid.model.Passbook.getBarcodeBitmap(Passbook.java:322)
E/AndroidRuntime( 4287):    at org.ligi.passandroid.ui.TicketViewActivity.onCreate(TicketViewActivity.java:86)
E/AndroidRuntime( 4287):    at android.app.Activity.performCreate(Activity.java:5008)
E/AndroidRuntime( 4287):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
E/AndroidRuntime( 4287):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
E/AndroidRuntime( 4287):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
E/AndroidRuntime( 4287):    at android.app.ActivityThread.access$600(ActivityThread.java:130)
E/AndroidRuntime( 4287):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
E/AndroidRuntime( 4287):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 4287):    at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 4287):    at android.app.ActivityThread.main(ActivityThread.java:4745)
E/AndroidRuntime( 4287):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 4287):    at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 4287):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
E/AndroidRuntime( 4287):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
E/AndroidRuntime( 4287):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 4287): Caused by: java.nio.charset.UnsupportedCharsetException: Cp437
E/AndroidRuntime( 4287):    at java.nio.charset.Charset.forName(Charset.java:303)
E/AndroidRuntime( 4287):    at com.google.zxing.pdf417.encoder.PDF417HighLevelEncoder.<clinit>(PDF417HighLevelEncoder.java:128)
E/AndroidRuntime( 4287):    ... 23 more
java.lang.ExceptionInInitializeError
E/AndroidRuntime(4287):位于com.google.zxing.pdf417.encoder.pdf417。(pdf417.java:531)
E/AndroidRuntime(4287):位于com.google.zxing.pdf417.encoder.pdf417。(pdf417.java:525)
E/AndroidRuntime(4287):位于com.google.zxing.pdf417.PDF417Writer.encode(PDF417Writer.java:52)
E/AndroidRuntime(4287):位于com.google.zxing.MultiFormatWriter.encode(MultiFormatWriter.java:94)
E/AndroidRuntime(4287):位于com.google.zxing.MultiFormatWriter.encode(MultiFormatWriter.java:47)
E/AndroidRuntime(4287):位于org.ligi.passandroid.helper.BarcodeHelper.getBitMatrix(BarcodeHelper.java:51)
E/AndroidRuntime(4287):位于org.ligi.passandroid.helper.BarcodeHelper.generateBarCodeBitmap(BarcodeHelper.java:23)
E/AndroidRuntime(4287):位于org.ligi.passandroid.model.Passbook.getBarcodeBitmap(Passbook.java:322)
E/AndroidRuntime(4287):位于org.ligi.passandroid.ui.TicketViewActivity.onCreate(TicketViewActivity.java:86)
E/AndroidRuntime(4287):位于android.app.Activity.performCreate(Activity.java:5008)
E/AndroidRuntime(4287):位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
E/AndroidRuntime(4287):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
E/AndroidRuntime(4287):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
E/AndroidRuntime(4287):位于android.app.ActivityThread.access$600(ActivityThread.java:130)
E/AndroidRuntime(4287):位于android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
E/AndroidRuntime(4287):位于android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(4287):位于android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(4287):位于android.app.ActivityThread.main(ActivityThread.java:4745)
E/AndroidRuntime(4287):位于java.lang.reflect.Method.Invokenactive(本机方法)
E/AndroidRuntime(4287):位于java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(4287):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
E/AndroidRuntime(4287):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
E/AndroidRuntime(4287):位于dalvik.system.NativeStart.main(本机方法)
E/AndroidRuntime(4287):由以下原因引起:java.nio.charset.UnsupportedCharsetException:Cp437
E/AndroidRuntime(4287):位于java.nio.charset.charset.forName(charset.java:303)
E/AndroidRuntime(4287):位于com.google.zxing.pdf417.encoder.PDF417HighLevelEncoder.(PDF417HighLevelEncoder.java:128)
E/AndroidRuntime(4287):。。。23多

是的,它是Java的扩展字符集。名称是正确的,默认情况下PDF417需要它。Android可能不支持它。如果选择不同的编码,会发生什么?如果你必须在Android上编码这种格式,这可能是最好的答案


编辑:这主要是解决问题的方法

一个小的解决方法是将EncodeHintType.CHARACTER_设置为“ISO-8859-1”。CP437是规范定义的PDF417的默认字符集。似乎CP437在android上不可用或有其他名称。感谢您的评论!我不想篡改编码,因为这可能是一种危险的IMHO-我希望我找到一种方法来提供这样的字符集:我不想篡改编码,因为这可能是一种危险的IMHO-我希望我找到一种方法来提供这样的字符集:实际上我认为这是可以修复的。它实际上不使用字符集进行编码,只使用名称。所以这是可以避免的我应该在github上为此打开一个问题吗?字符集用于字节压缩模式。我认为最好回退到ISO-8859-1或类似版本,以反映版本3.0.0之前的行为。(如果目标平台不支持Cp437)