gpt4 book ai didi

c# - 使用 C# 将 UCS-2 字符转换为 UTF-8

转载 作者:太空宇宙 更新时间:2023-11-03 22:17:27 25 4
gpt4 key购买 nike

我正在从 MS SQL Server 2005 数据库中提取一些国际化文本。根据该数据库的默认值,字符存储为 UCS-2。但是,我需要以 UTF-8 格式输出数据,因为我正在通过网络发送数据。目前,我有以下代码要转换:

SqlString dbString = resultReader.GetSqlString(0);
byte[] dbBytes = dbString.GetUnicodeBytes();
byte[] utf8Bytes = System.Text.Encoding.Convert(System.Text.Encoding.Unicode,
System.Text.Encoding.UTF8, dbBytes);
System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
string outputString = encoder.GetString(utf8Bytes);

但是,当我在浏览器中检查输出时,无论我将编码设置为什么,它似乎都是垃圾。

我错过了什么?

编辑:针对以下答案,我认为必须执行转换的原因是因为我可以很好地输出文字多字节字符串。例如:

OutputControl.Text = "カルフォルニア工科大学とチューリッヒ工科大学は共同で、太陽光を保管可能な燃料に直接変えることのできる装置の開発に成功したとのこと";

有效。这里,OutputControl 是一个 ASP.Net Literal。然而,

OutputControl.Text = outputString; //Output from above snippet

导致如上所述的错位输出。我的假设是数据库的输出以某种方式被 ASP.Net 破坏了。如果不是这种情况,那么还有哪些其他可能性?

编辑 2:好吧,我傻了。事实证明,数据库根本没有问题。当我尝试插入我自己的文字双字节字符(素材,原料;木料)时,即使根本没有任何转换过程,我也可以很好地读取和输出它们。在我看来,将数据插入数据库的任何东西都以某种方式破坏了字符,所以我要看一下。使用我经过验证的“干净”数据,以下代码有效:

OutputControl.Text = dbString.ToString();

正如下面的回复所表明的那样。

最佳答案

您的代码与以下内容基本相同:

SqlString dbString = resultReader.GetSqlString(0);
string outputString = dbString.ToString();

string 本身是一个 UNICODE 字符串(特别是 UTF-16,它“几乎”与 UCS-2 相同,除了代码点不适合最低 16 位)。换句话说,您正在执行的转换是多余的。

您的网络应用很可能也在其他地方破坏了编码,或者为 HTML 输出设置了错误的编码。但是,根据您目前提供的信息无法诊断。

关于c# - 使用 C# 将 UCS-2 字符转换为 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4555176/

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