最初,我们使用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/