2016-08-15 95 views
1

Crashlytics所上报的关于我的应用程序崩溃:安卓CharsetEncoder.canEncode例外

代码:

asciiEncoder = Charset.forName("US-ASCII").newEncoder(); // or "ISO-8859-1" for ISO Latin 1 
... 
public static boolean isPureAscii(String v) { 
    return asciiEncoder.canEncode(v); 
} 

错误:

Fatal Exception: java.lang.IllegalArgumentException: ucnv_fromUnicode failed: U_ILLEGAL_ARGUMENT_ERROR 
     at libcore.icu.NativeConverter.encode(NativeConverter.java) 
     at java.nio.charset.CharsetEncoderICU.implFlush(CharsetEncoderICU.java:140) 
     at java.nio.charset.CharsetEncoder.flush(CharsetEncoder.java:464) 
     at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:266) 
     at java.nio.charset.CharsetEncoder.canEncode(CharsetEncoder.java:202) 
     at CorrectLocationUtfTokenizable.isPureAscii(CorrectLocationUtfTokenizable.java:38) 

设备:ASUS T00J,Android操作系统:5.0

失败的字符串是未知的,但它不为空。

有什么想法?

回答

0

也许华硕T00J的这个libcore.icu.NativeConverter的执行有这个边缘情况下的错误。 您可以尝试在isPureAscii()内部捕捉RuntimeException,并返回任何引发的错误。
但可能更便宜的方法会更好地工作:

public static boolean isPureAscii(String v) { 
    return v==null? false: v.matches("\\A\\p{ASCII}*\\z"); 
} 

credit