2016-08-15 40 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