gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:42:21 25 4
gpt4 key购买 nike

我编写了以下函数,它可以删除字符串中无法在 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);

这似乎是我想要的,但我什至无法编写一个模仿我已经使用字符集编码器拥有的功能的函数,但单独设置这些选项。

而且我仅限于 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);
}

最佳答案

一种可能的方式是

// U+2126 - omega sign
// U+2013 - en dash
// U+201c - left double quotation mark
// U+201d - right double quotation mark
String str = "\u2126\u2013\u201c\u201d";
System.out.println("original = " + str);
str = str.replace("–", "-");
str = str.replace("“", "\"");
str = str.replace("”", "\"");
System.out.println("replaced = " + str);
StringBuilder sb = new StringBuilder();
for (char c : str.toCharArray()) {
if (c <= '\u00ff') {
sb.append(c);
}
}
System.out.println("stripped = " + sb);

输出

original = Ω–“”
replaced = Ω-""
stripped = -""

关于Java 6 将 utf8 转换为 iso88591 字符集并忽略不可映射的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48461822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com