Android - 如何在Android中将字符串转换为utf-8

10

我无法在安卓中将字符串转换为UTF-8编码,请帮助我!

s1=URLEncoder.encode("臺北市")

结果: %EF%BF%BDO%EF%BF%BD_%EF%BF%BD%EF%BF%BD

但是"臺北市"应该被编码为"%E8%87%BA%E5%8C%97%E5%B8%82"


我使用URLEncoder.encode("臺北市", "utf-8"),但尚未找到解決方案。 - Zih-Yang Lin
4个回答

17
public class StringFormatter {

    // convert UTF-8 to internal Java String format
    public static String convertUTF8ToString(String s) {
        String out = null;
        try {
            out = new String(s.getBytes("ISO-8859-1"), "UTF-8");
        } catch (java.io.UnsupportedEncodingException e) {
            return null;
        }
        return out;
    }

    // convert internal Java String format to UTF-8
    public static String convertStringToUTF8(String s) {
        String out = null;
        try {
            out = new String(s.getBytes("UTF-8"), "ISO-8859-1");
        } catch (java.io.UnsupportedEncodingException e) {
            return null;
        }
        return out;
    }

}

您可以使用StringFormatter类将字符串转换为您的代码。

您想要转换为UTF-8:

String normal="This normal string".
String utf=StringFormatter.convertStringToUTF8(normal);

您想将UTF-8转换为普通格式:

String normal=StringFormatter.convertUTF8ToString(normal);

在上方所写的内容中添加一些描述。 - Mathews Sunny
1
它正在使用默认编码将字符串转换为UTF-8。 - Paras Santoki

13

结果仍然是%EF%BF%BDO%EF%BF%BD_%EF%BF%BD%EF%BF%BD。 - Zih-Yang Lin
1
"%EF%BF%BDO%EF%BF%BD_%EF%BF%BD%EF%BF%BD" 不是一个 UTF-8 编码序列。 - Remy Lebeau
但是 "URLEncoder.encode("臺北市", "utf-8")" 的输出是 %EF%BF%BDO%EF%BF%BD_%EF%BF%BD%EF%BF%BD。 - Zih-Yang Lin
如果是这样的话,那么Android的实现就有问题,应该向Google报告。同时,手动实现URL编码很容易。使用"臺北市".getBytes("utf-8"),然后将每个非ASCII字母数字字节转换为其"%XX"十六进制表示形式即可。 - Remy Lebeau

8

您可以直接使用以下代码:

URLEncoder.encode(string, "UTF-8");

这将以UTF-8格式对你的"string"进行编码。 如果需要,可以将其放在try/catch语句中并检查是否会抛出IllegalArgumentException异常。如果你的字符串中有任何空格,请用指定的字符替换。
string.replace(" ", "%20");

您的问题解决了吗?如果有帮助请接受答案。这是在 SO 上表达"谢谢"的方式。 - Aritra Roy
1
非常棒的答案,特别是 string.replace(" ", "%20"); 这一部分。这应该是最佳答案。 - hadi

2

使用这个:

        URLEncoder.encode("臺北市", "UTF-8");

你的第二个例子是使用Java的默认编码将字符串转换为字节,但不能保证该编码是UTF-8,并且随后创建一个新的字符串,将字节解释为UTF-8。这与URLEncoder.encode()的作用完全不同(尽管你的第一个例子是针对所问问题的正确答案)。 - Remy Lebeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接