Android是否等效于string.canBeConvertedToStringEncoding(encoding)

时间:2019-07-16 07:50:44

标签: java android objective-c encoding character-encoding

iOS中,有一种方法canBeConvertedToStringEncoding会告诉您是否可以将给定的string编码为提供的编码/字符集类型(即UTF-8,ISOLatin1等等)。 Android / Java 中是否有任何等效的内置方法?

iOS还具有fastestEncodingsmallestEncoding,它们将返回给定字符串可用的最佳编码类型。 Android有与这些类似的东西吗?

谢谢。

3 个答案:

答案 0 :(得分:1)

Java没有这种方法,但是您可以通过尝试编码/解码来检查字符串是否可以用特定的字符编码正确表示。

例如,您可以使自己的string.canBeConvertedToStringEncoding等价如下:

import java.io.UnsupportedEncodingException;

class Main {
  public static void main(String[] args) throws UnsupportedEncodingException {
    if (canBeConvertedToStringEncoding("abc", "ISO-8859-1")) {
      System.out.println("can be converted");
    } else {
      System.out.println("cannot be converted");
    }

    if (canBeConvertedToStringEncoding("あいう", "ISO-8859-1")) {
      System.out.println("can be converted");
    } else {
      System.out.println("cannot be converted");
    }
  }

  public static boolean canBeConvertedToStringEncoding(String target, String encoding) throws UnsupportedEncodingException {
    String to = new String(target.getBytes(encoding), encoding);
    return target.equals(to);
  }
}

答案 1 :(得分:0)

在android转码文本中,如下所示:

byte[] utf8 = new String(string, "ISO-8859-1").getBytes("UTF-8");

请参阅How do I convert between ISO-8859-1 and UTF-8 in Java?

字符集canEncode:

boolean ISO = Charset.forName("ISO-8859-1").newEncoder()
                .canEncode(str);

https://developer.android.com/reference/java/nio/charset/Charset.html#canEncode()

答案 2 :(得分:-1)

尝试使用URLEncoder.encode(string, "UTF-8");