【问题标题】:JDBC: Issue with rendering Danish specific characters: Ø,Å,ÆJDBC:呈现丹麦语特定字符的问题:Ø、Å、Æ
【发布时间】:2021-04-19 08:48:33
【问题描述】:

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

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

连接初始化sn-p

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)
) {

读取数据sn-p:

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);
        }

【问题讨论】:

  • 我的 猜测 问题在于您使用什么语言来插入数据,而不是数据库(因为在使用该排序规则时插入这些字符可以正常工作) .您也应该在此处标记应用程序的语言。
  • 谢谢,很好,应用程序是用java编写的。数据已被其他应用插入,用户区域设置为 da_DK
  • 您使用什么操作系统?默认的字符编码是什么?在开发和生产环境中。
  • 开发环境:我使用的是 MacOS,SQL Server 安装为 Docker Image。暂存:app\SQL 服务器正在 Windows 上运行。 Java版本:openjdk版本“1.8.0_275”
  • 请注意您在 MacOS (UTF-8) 和 Windows (cp-1252或某些变体) 中使用的 JVM 的不同默认字符集:我意识到您指出了字符集 @987654327 @ 在您的连接属性中,但问题可能与某种后处理有关(文件输出,...)

标签: java sql-server jdbc mssql-jdbc


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 请,抱歉回复晚了。非常感谢您的编辑@Nazar。我很高兴知道答案很有帮助并且您可以解决您的问题。如果您需要进一步的帮助,请随时与我联系,如果可以的话,我很乐意为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 2011-10-29
  • 2015-03-04
  • 2021-09-05
  • 2013-02-15
  • 1970-01-01
  • 2020-03-07
  • 2018-01-28
  • 1970-01-01
相关资源
最近更新 更多