【问题标题】:Replace non english character in a string with utf-8 character in Android / Java在Android / Java中用utf-8字符替换字符串中的非英文字符
【发布时间】:2016-09-08 10:28:57
【问题描述】:

我需要将一些非英文字符替换成\u00格式。

喜欢:BetalingsMåde,所以有问题的字符是 å,需要转换为 \u00e5

我什么都试过了

updateRequest=updateRequest.replaceAll("[^\p{ASCII}]", "");

但这只会删除非英文字符。

我还需要通过带有 HTTP 请求的 POST 发送此请求(也尝试过

setRequestProperty("content-type","application/json;charset=utf-8");

没有运气,所以如果也有答案。

提前致谢!

【问题讨论】:

标签: java android


【解决方案1】:

如果您想转换为 unicode 转义字符串,您可以这样做:

org.apache.commons.lang3.StringEscapeUtils.escapeJava("Your string to escape");

它是Apache Commons Lang 3 Package 的一部分。

【讨论】:

  • 谢谢,这个答案拯救了一天!
【解决方案2】:

在 java String/char 中已经包含 Unicode 文本。然而,有些事情可能出错了。有一个混乱的字符串总是意味着必须纠正入口点。

Java 源代码中的硬编码字符串需要编译器和编辑器使用相同的编码。现在我会将 IDE 的编码设置为 UTF-8。

属性文件默认受 ISO-8859-1 限制,这意味着应该使用\uXXXX

文件必须使用指定文件的编码来读取。通常有一个没有编码的重载方法。并且不应该使用旧的 FileReader/FileWriter,它们使用当前平台编码 - 不可移植。

数据库中的文本只是有问题,如果数据库定义错误,或者 JDBC 驱动程序可以与另一种编码进行通信。

我不确定您是否想要以下内容,这与 java2ascii 工具的功能有些相似。

String toAscii(String s) {
    StringBuilder sb = new StringBuilder(s.length() * 9 / 10);

    for (int i = 0; i < s.length(); ++i) {
        int ch = (int) s.charAt(i);
        if (0 < ch && ch < 128) {
            sb.append(ch);
        } else {
            sb.append(String.format("\\u%04x", ch));
        }
    }
    return sb.toString();
}

更有可能使用setRequestProperty("content-type","text/json;charset=utf-8");,因此确实使用了字符集(文本)。或者更可能是响应,而不是请求。

【讨论】:

    猜你喜欢
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    相关资源
    最近更新 更多