SQL 服务器输出查询为 UTF8 而不是 UTF16

SQL Server Output query to UTF8 instead of UTF16

我一直在尝试使用来自 SQL 查询的一些数据向 JSON 网络服务提供数据。我遇到的问题是数据在 SQL 服务器数据库中存储为 UTF16,我必须将其作为 UTF8 提供给 Web 服务。

我想在 SQL 查询运行时使用我的 SQL 查询来转换数据。我一直在阅读各种论坛,并没有一种特别简单的方法来进行转换。

例如,我有 ÖSTLUND 这样的名字,据我所知,它是有效的 Unicode/Windows 代码页 1253。

我认为 UFT8 更像是 Windows 代码页 1252 是否正确?

我尝试过各种版本的 Cast 和 Collat​​e,但我正在努力寻找哪种方式能给我最好的答案。

    (cast(SURNAME as varchar(100)) COLLATE SQL_Latin1_General_Pref_CP1_CI_AS) 

    (cast(SURNANE as varchar(100)) COLLATE Latin1_General_100_CI_AS_KS_WS_SC)

有没有人对如何最好地做到这一点有任何建议? Cast and Collat​​e 是执行此操作的方法吗?

更新:

该应用程序是用 Uniface 编写的旧应用程序。应用服务器是运行SQL脚本来响应数据库字段的变化。然后它使用 SQL 输出填充 Web 服务 post 的负载。 SQL 的输出符合 Web 服务的 JSON。

首先,Unicode是可以表示所有字符的能力,不需要代码页。 UTF-8、UTF-16 和 UTF-32 都是 Unicode,都表示所有 Unicode 字符(当然是当前映射的字符)。

关于这个特殊问题,SQL 服务器,就像 Windows 和 .NET 一样,在 Unicode 数据方面实际上只适用于 UTF-16(小尾数)。如果您想要 UTF-8 格式的字符串,那么在从结果集中的 SQL 服务器获取数据后,您会将它们编码为 UTF-8,因为您将其打包为 JSON 格式。所以听起来必须在 "Uniface".

中完成

此外,关于问题中的两个 CAST 语句,它们实际上做同样的事情,因为它们都使用 Latin1 locale/LCID 映射到 VARCHAR 数据的代码页 1252。