gpt4 book ai didi

json - 在 ms sql (SQL Server) 中以\u0 格式 (json) 转义变音

转载 作者:行者123 更新时间:2023-12-05 06:37:34 25 4
gpt4 key购买 nike

我正在获取 json 文件,我将其加载到 Azure SQL 数据库。这个 json 是 API 的直接输出,所以在加载到 DB 之前我无能为力。在该文件中,所有波兰语双语都转义为“C/C++/Java 源代码”(基于:http://www.fileformat.info/info/unicode/char/0142/index.htm

例如:

 ł is \u0142

我试图找到一些方法将它们转换(转义)为正确的波兰字母。

在更坏的情况下,我可以编写函数来替换所有组合

Repalce(Replace(Replace(string,'\u0142',N'ł'),'\u0144',N'ń')))

等等,做一个又大又糟糕的函数...

我一直在寻找一些现成的函数,比如 URLdecode,它在许多主题的堆栈上都得到了回答,在这里:https://www.codeproject.com/Articles/1005508/URL-Decode-in-T-SQL

使用此解决方案是可能的,但我无法通过适当的排序规则和类型来计算转换/转换,以获得我正在寻找的结果。因此,如果有人知道/具有可以在字符串中进行转换以取消转义\u 的功能,那就太好了,但是如果我能得到正确的转换,我会设法自己写一些东西。例如我试过:

 select convert(nvarchar(1), convert(varbinary, 0x0142, 1))

我假设将\u 更改为 0x 将是答案,但它给出了一些汉字。所以这是错误的方向......

编辑:在谷歌搜索更多之后,我在@Pasetchnik 的堆栈上发现了完全相同的问题:Json escape unicode in SQL Server看起来这将是 MS SQL 中最好的解决方案。我唯一需要更改的是使用 NVARCHAR 而不是链接解决方案中的 VARCHAR:

CREATE FUNCTION dbo.Json_Unicode_Decode(@escapedString nVARCHAR(MAX))
RETURNS nVARCHAR(MAX)
AS
BEGIN
DECLARE @pos INT = 0,
@char nvarCHAR,
@escapeLen TINYINT = 2,
@hexDigits TINYINT = 4

SET @pos = CHARINDEX('\u', @escapedString, @pos)

WHILE @pos > 0
BEGIN
SET @char = NCHAR(CONVERT(varbinary(8), '0x' + SUBSTRING(@escapedString, @pos + @escapeLen, @hexDigits), 1))
SET @escapedString = STUFF(@escapedString, @pos, @escapeLen + @hexDigits, @char)
SET @pos = CHARINDEX('\u', @escapedString, @pos)
END

RETURN @escapedString
END

最佳答案

代替嵌套的 REPLACE 你可以使用:

DECLARE @string NVARCHAR(MAX)=  N'\u0142 \u0144\u0142';

SELECT @string = REPLACE(@string,u, ch)
FROM (VALUES ('\u0142',N'ł'),('\u0144', N'ń')) s(u, ch);

SELECT @string;

DBFiddle Demo

关于json - 在 ms sql (SQL Server) 中以\u0 格式 (json) 转义变音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47487301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com