Java和Unicode的麻烦

Java和Unicode的麻烦,java,Java,我有一个Java程序,它从SQL Server数据库获取行,并将同一行插入Informix数据库。Informix DB仅支持8859-1字符集。有时,用户通过从Word或Excel复制和粘贴的方式在SQL server DB中插入一行,这会导致一些字符最终成为Unicode字符(其中一些字符的大小为3字节) 如何编写一个过滤器函数,用例如“?”或其他字符替换unicode字符 /Jimmy您可以将所有非ASCII字符替换为?: StringBuilder buf = new StringBui

我有一个Java程序,它从SQL Server数据库获取行,并将同一行插入Informix数据库。Informix DB仅支持8859-1字符集。有时,用户通过从Word或Excel复制和粘贴的方式在SQL server DB中插入一行,这会导致一些字符最终成为Unicode字符(其中一些字符的大小为3字节)

如何编写一个过滤器函数,用例如“?”或其他字符替换unicode字符


/Jimmy

您可以将所有非ASCII字符替换为

StringBuilder buf = new StringBuilder();
for (char ch : originalString.toCharArray()) {
    if (ch > 127) {
        buf.append('?');
    } else {
        buf.append(ch);
    }
}
return buf.toString();
另一种方法是使用正则表达式:

originalString.replaceAll("\\P{ASCII}", "?")

它将所有非ASCII字符替换为

您可以将所有非ASCII字符替换为

StringBuilder buf = new StringBuilder();
for (char ch : originalString.toCharArray()) {
    if (ch > 127) {
        buf.append('?');
    } else {
        buf.append(ch);
    }
}
return buf.toString();
另一种方法是使用正则表达式:

originalString.replaceAll("\\P{ASCII}", "?")

它将所有非ASCII字符替换为

可能相关:8859-1有256个编码点,编码值为0到255,因此任何字节值序列都是有效的。您如何判断字节序列应该被解释为UTF-8而不是8859-1?用户在哪里粘贴文本,导致系统处理错误?可能与此相关:8859-1有256个编码点,编码值为0到255,因此任何字节值序列都是有效的。您如何判断字节序列应该被解释为UTF-8而不是8859-1?用户在哪里粘贴文本,导致系统处理错误?