首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JSON中将unicode转换为中文字符?

在JSON中将unicode转换为中文字符?
EN

Stack Overflow用户
提问于 2021-06-11 02:12:41
回答 2查看 372关注 0票数 0

我使用unicode提供了一些JSON格式的数据库数据( server 2008),如下所示:

代码语言:javascript
复制
{"PCode":"999999","Code":"123","effect":"\u4e2d\u6587\u5b57\u6e2c\u8a66"}

\u4e2d\u6587\u5b57\u6e2c\u8a66是汉字,我怎么才能把汉字中的数据删除呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-11 07:10:54

答案:

似乎您使用的是Server 2008 (其中没有JSON支持),因此,一个可能的方法是将unicode序列解析为XML。请注意,XML不使用\u符号,因此需要使用XML字符引用&#x[0-9a-fA-F];转换此JSON文本

代码语言:javascript
复制
DECLARE @text nvarchar(max)
SET @text = N'\u4e2d\u6587\u5b57\u6e2c\u8a66'

DECLARE @xml xml
SET @xml = N'<x>' + STUFF(REPLACE(@text, N'\u', N';&#x'), 1, 1, N'') + N';</x>'
SELECT @xml.value('(/x)[1]', 'nvarchar(max)') AS [ChineseText]

结果:

代码语言:javascript
复制
ChineseText
-----------
中文字測試

注意,在Server 2016中,您可以使用JSON_VALUE()轻松地解析JSON。

代码语言:javascript
复制
SELECT JSON_VALUE(CONCAT(N'["', @text, N'"]'), '$[0]') AS [ChineseText]

更新:

如果JSON有其他字符,则需要使用XML和\u作为分隔符拆分JSON内容:

代码语言:javascript
复制
DECLARE @text nvarchar(max)
SET @text = N'\u4e2deng\u6587eng\u5b57234\u6e2c\u8a66'

DECLARE @xml xml
SET @xml = CONCAT(STUFF(REPLACE(@text, N'\u', N'</x><x>'), 1, 4, N''), N'</x>')
SELECT 
   CONVERT(xml, N'<x>&#x' + LEFT(t.value('.', 'nvarchar(max)'), 4) + N';</x>').value('(/x)[1]', 'nvarchar(max)'), 
   STUFF(t.value('.', 'nvarchar(max)'), 1, 4, N'')
FROM @xml.nodes('/x') AS x(t)
FOR XML PATH('')

结果:

代码语言:javascript
复制
中eng文eng字234測試
票数 3
EN

Stack Overflow用户

发布于 2021-06-11 04:28:50

有更好的练习吗?

代码语言:javascript
复制
DECLARE @Text NVARCHAR(MAX)
DECLARE @stringToSplit NVARCHAR(MAX)
DECLARE @returnList TABLE ([Name] [nvarchar] (500))

set @stringToSplit = '\u4e2d\u6587\u5b57\u6e2c\u8a66'

 DECLARE @name NVARCHAR(255)
 DECLARE @pos INT

 WHILE CHARINDEX('\u', @stringToSplit) > 0
 BEGIN
  SELECT @pos  = CHARINDEX('\u', @stringToSplit)  
  SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)

  IF @name <> ''
  BEGIN
  INSERT INTO @returnList 
  SELECT NCHAR( CONVERT(INT, CONVERT(VARBINARY,@name, 2) ) )
  END

  SELECT @stringToSplit = SUBSTRING(SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos),2,LEN(@stringToSplit))
 END

 INSERT INTO @returnList
 SELECT NCHAR( CONVERT(INT, CONVERT(VARBINARY,@stringToSplit, 2) ) )

 select * from @returnList
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67930480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档