最初我们使用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();
}
答案 0 :(得分:0)
您可能需要检查Windows和Linux安装使用的默认字符集。只需打印Charset.defaultCharset()
并查看值是否相同。
当您创建阅读器时,请明确传递Charset以使其真正与环境无关。