JDBC:呈现丹麦语特定字符时出现问题:Ø,Å,Æ



问题:丹麦语特定字符显示不正确(作为不可读字符)

给定:数据库为Microsoft SQL server 2019,数据库排序规则为:Danish_Greenlandic_100_CS_AS。数据已经存储在Varchar列类型中,数据已经存在;更改排序规则或任何数据修改都是不合适的。我不是在插入数据,只是在读取它们(某种报告功能)。在我的本地机器上一切都很好,但在舞台环境中,丹麦字符的编码不正确。

连接初始化片段

Properties props = new Properties();
props.put ("charSet", "UTF-8");
props.put("username", "dbusername");
props.put("password", "secret");
try (Connection con = getConnection(repositoryUrl, props);
PreparedStatement preparedStatement = con.prepareStatement(sqlQuery)
) {

读取数据片段:

ResultSet rs = //getResultSet
while (rs.next()) {
Map<String, String> rowEntry = new LinkedHashMap<>();
for (int i =0; i < columnCount; i++ ) {
int columnIndex = i+1;
String value = rs.getString(columnIndex);
rowEntry.put(columnName, value);
}
result.add(rowEntry);
}

该问题可能与在MacOS(默认情况下为UTF-8)、本地笔记本电脑和暂存环境中的Windows(cp-1252或某些变体)中使用不同的字符集有关。

尽管您在连接属性中指示了字符集UTF-8,但问题可能与某种后处理有关。

事实上,如问题注释所示,服务器响应和日志文件都是上述字符集问题的典型示例。

请查看JVM中每个环境中的字符集:如果需要,请查看并调整笔记本电脑和暂存环境中file.encoding系统属性的值,也许它会让您对问题有一些了解并帮助您解决问题。

因此,为了解决您的问题,请尝试在运行应用程序时添加file.encodingJVM参数:

java -Dfile.encoding=UTF-8 -jar your_app.jar

最新更新