Json SQL Server 2012中的字符编码问题

Json SQL Server 2012中的字符编码问题,json,sql-server,character-encoding,Json,Sql Server,Character Encoding,我有一个具有以下功能的web应用程序: SQL Server数据库,其中开发了存储过程以接收请求和发送响应(均为JSON格式) 处理交换的servlet(Tomcat) web客户端应用程序 servlet记录从客户端收到的每个请求以及从服务器收到并发送到客户端的响应 有些响应(来自数据库)包括从某些表格中提取的特殊字符(例如希腊字母、摄氏度符号等) 检查表的内容(从中检索这些符号)时,它们都按预期显示 在servlet的日志中检查响应(包含上述特殊字符)时,只要有特殊字符和控制字符,就会显示为

我有一个具有以下功能的web应用程序:

  • SQL Server数据库,其中开发了存储过程以接收请求和发送响应(均为JSON格式)
  • 处理交换的servlet(Tomcat)
  • web客户端应用程序
  • servlet记录从客户端收到的每个请求以及从服务器收到并发送到客户端的响应

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

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

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

    我假设问题在“表”和响应消息提交之间的某个位置,但无法确定在哪里

    数据库的当前排序规则是SQL拉丁1\u通用CP1255\u CI\u AS。我发现一些文档提到了
    \u SC
    排序规则选项的引入,但我在列表中没有看到它们(DB属性)

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

    编辑[跟随汤姆的评论] 不需要任何代码,因为它会添加不需要的信息

    情况是:

  • 存储过程生成一个JSON,在ManagementStudio中打印时,该JSON会正确显示特殊字符(例如希腊语)
  • 在servlet(用JAVA编写)中,从存储过程接收的响应被记录到一个文件中,其中特殊字符显示为控制字符
  • 所有涉及的SQL变量都是
    NVARCHAR()类型的declare
  • 通过取消资格我的意思是JSON变得非法(因此JavaScript标记错误)
  • 因此,问题是:

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

  • 请说明实际问题,展示一些涉及的代码,并解释“取消资格”。(JSON支持字符串值和键中的每个Unicode[因此CP1255]码点。)@TomBlodget,感谢您的回答。请参考编辑。正如我所说,JSON可以将任何Unicode字符串表示为值或键。问题一定是存储过程@TomBlodget,如果我用“milli litters”(即“ml”)替换“micro litters”(使用一个MU希腊字符),JSON就会完美无瑕,客户端也不会消化它。正如我编写/询问的那样,我不知道如何将MU转换为正确的编码。这是我的问题,不是程序。@halfer,谢谢你的链接。我一有时间就试试看。在任何情况下,我相信你和我想要的都是一样的(尽管在道路上有一些不同)。我们应该使用相同的GPS导航器重试:-)。