最初,我们使用ASCII格式将数据存储在数据库中。
在读取相同的数据时,我正在使用getASCIIStream()ResultSet方法来避免字符集转换问题。这种方法可以在Windows环境中提供正确的数据,但是当我在Linux环境中部署war文件时,它会显示吗?标记而不是特殊字符。
例如:数据存储在数据库中:§©µ

Windows环境中的检索值:§©µ

在Linux环境中检索的值:���

下面是代码的快照:

Mapper.java

InputStream inputStream = resultSet.getAsciiStream("supplier_destination_operator");


下面是我用来将上述输入流转换为字符串的代码快照。

BufferedReader reader;
StringBuilder target = new StringBuilder();
int asciiVal;
if(inputStream != null) {
    try {
    reader = new BufferedReader(new InputStreamReader(inputStream));
    while((asciiVal = reader.read()) != -1){
    char ch = (char)asciiVal;
    target.append(ch);
    } catch(e){}
    return target.toString();
}

最佳答案

您可能需要检查Windows和Linux安装所使用的默认字符集。只需打印Charset.defaultCharset()并查看值是否相同。

在创建阅读器时,请明确传递一个字符集,以使其真正不受环境影响。

关于java - 使用Java从sybase数据库读取数据时在Linux上出现特殊字符问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31942576/

10-11 02:36
查看更多