Java 6将utf8转换为iso88591字符集并忽略不可映射的字符

时间:2018-01-26 12:56:32

标签: java utf-8 character-encoding

我编写了以下函数来删除无法在iso88591中表示的字符串中的字符:

public static String convert(String str) {
    if (str.length()==0) return str;
    str = str.replace("–","-");
    str = str.replace("“","\"");
    str = str.replace("”","\"");
    return new String(str.getBytes(),iso88591charset);
}

我的问题是这没有我需要的行为。 当遇到没有表示的字符时,它会转换为多个字节。我希望从结果中省略该字符。

我还想以某种方式不必拥有所有替换命令。

我一直在研究charsetEnocder。它有如下方法:

CharsetEncoder encoder = iso88591charset.newEncoder();
encoder.onMalformedInput(CodingErrorAction.IGNORE);
encoder.onUnmappableCharacter(CodingErrorAction.IGNORE);

这似乎是我想要的,但是我甚至没有使用charset编码器编写一个模仿我已经拥有的函数,但却单独设置了这些选项。

我也受限于Java 6 :(

更新: 我想出了一个讨厌的解决方案,但必须有一个更好的方法来做到这一点:

public static String convert(String str) {
    if (str.length()==0) return str;
    str = str.replace("–","-");
    str = str.replace("“","\"");
    str = str.replace("”","\"");
    String str2 = "";
    for (int c=0;c<str.length();c++) {
        String cur = (new Character(str.charAt(c))).toString();
        if (cur.equals(new String(cur.getBytes(),iso88591charset))) str2 += cur;
    }
    return new String(str2.getBytes(),iso88591charset);
}

1 个答案:

答案 0 :(得分:1)

一种可能的方式可能是

rev 1000
rev 1001
..
rev 1008
...
rev 1011
...
rev 1015

输出

1000