JDBC:渲染丹麦语特定字符时出现问题:Ø、Å、Æ

JDBC: Issue with rendering Danish specific characters: Ø,Å,Æ

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

鉴于: 数据库为 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,但问题可能与某种 post 处理有关。

事实上,正如问题评论中所指出的,服务器响应和日志文件都是上述字符集问题的典型示例。

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

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

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