【问题标题】:Question mark with diamond when read nvarchar from SQL Server从 SQL Server 读取 nvarchar 时带菱形的问号
【发布时间】:2020-10-01 05:21:35
【问题描述】:

我在这里遇到了一个很奇怪的问题。

我需要从 SQL Server(2016 版)读取数据。像O'Neal 这样的名字。

当我在 IDE/TextEditor 中加载字符串时,O'Neal 可以正确读取为O'Neal

但是当我将程序打包为 jar 或 war 文件时,O'Neal 会像这样 O��Neal 加载。

我不知道这是怎么发生的。任何建议将不胜感激。谢谢。

【问题讨论】:

  • 加载是什么意思?您是否尝试在某处打印该值?如果实际文本使用 UTF-8 编码,请确保在显示文本时使用相同的编码。
  • @ShashankKadne 抱歉缺少信息。是的,我在控制台中打印它们。实际上,我不确定编码,我检查了SELECT SERVERPROPERTY('Collation'),它返回 SQL_Latin1_General_CP1_CI_AS

标签: java tomcat jdbc


【解决方案1】:

参考this question

就像@Arvind 所说,它在 IDE/Editor 中可以正常运行,因为它已经被编码为 UTF-8。

但是,jar 或 tomcat 不是,因此我们必须确保它以 UTF-8 编码运行。

  1. 在 Windows 10 CMD 中,jar 文件可以这样运行:

> java -Dfile.encoding="UTF-8" -jar test.jar

但是这个命令无法在 PowerShell 中运行,我不知道为什么这是另一个问题。

  1. 如果你想在tomcat服务器上运行war文件,在{pathToTomcat}/bin,用编辑器打开catalina.bat

添加set "JAVA_OPTS=%JAVA_OPTS% -Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    相关资源
    最近更新 更多