首页 > 解决方案 > SQL Server 2012 中的字符编码问题

问题描述

我有一个 Web 应用程序:

  1. 一个 SQL Server 数据库,其中开发了存储过程来接收请求和发送响应(全部采用 JSON 格式)
  2. 处理交换的 servlet (Tomcat)
  3. 一个 Web 客户端应用程序。

servlet 记录从客户端接收到的每个请求以及从服务器接收并发送到客户端的响应。

有一些响应(来自数据库)包括从某些表中提取的特殊字符(例如希腊字母、摄氏度符号等)。

检查表的内容(从中检索这些符号)时,它们都按预期显示。

在 servlet 的日志中检查响应(包含上述特殊字符)时,到处都有特殊字符和控制字符显示为 JSON 的一部分,显然,它们取消了它的资格。

我认为问题出在“TABLE”和响应消息提交之间,但不知道在哪里。

数据库的当前排序规则是 SQL_Latin1_General_CP1255_CI_AS。我发现一些文档提到了_SC排序规则选项的介绍,但我没有在列表中看到它们(数据库属性)。

我在哪里可以找到问题并(甚至更好)提出解决方案?

编辑[按照汤姆的评论]

不需要任何代码,因为它会添加不需要的信息。

情况是:

  1. 存储过程会生成 JSON,当在 Management Studio 中打印时,它会正确显示特殊字符(例如希腊语)。
  2. 在 servlet(用 JAVA 编写)中,从存储过程接收到的响应被记录到一个文件中,其中特殊字符显示为 CONTROL CHARACTERS,
  3. 所有涉及的 SQL 变量都声明为 type NVARCHAR(<size>)
  4. 取消资格是指 JSON 变得非法(因此 JavaScript 标记错误)。

所以,问题是:

  1. SQL Server 中是否有一种方法可以将这些特殊字符转换为某种表示形式,这些表示形式可以从 DB 一直干净地传输到 JavaScript 并被正确地接受为合法的 JSON?或者
  2. 是否有任何配置(数据库、连接、Tomcat、JavaScript 的 POST 标头)可以解决问题?

标签: jsonsql-servercharacter-encoding

解决方案


推荐阅读