2016-08-15 4 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、アンドロイドOS:5.0

失敗する文字列は不明ですが、nullではありません。

どのような考えですか?

答えて

0

このlibcore.icu.NativeConverterのASUS T00J実装では、このエッジケースにバグがある可能性があります。 RuntimeExceptionisPureAscii()の内側にキャッチして、何かのfalseが返されるようにすることができます。
おそらく安価な方法は、より良い仕事します:

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

credit

関連する問題