我有一个包含现有数据的现有数据库,无法更改其结构或值。
在该数据库中,有一个nvarchar列,该列包含暮光unicode区域中以F800开头(向上)的值。
当我在SQL中选择这些值或使用SQL函数时,unicode-我得到了正确的值。
当我在.Net中选择相同的值时-得到一个错误值-该暮光区域中的所有值都变为65533。
我需要这些值-如何说服.Net给我这些值-就像将连接编码更改为自定义值-或ucs-2等...

这是使问题恶化的示例代码:

c.CommandText = "select NCHAR(55297)";
using (var r = c.ExecuteReader())
{
   r.Read();
   var result = r[0]; //expected 55297 but got 65533
}

最佳答案

55297是未定义的D801?您可能想要的f801是63489?但这似乎也没有定义。您想要哪些字符?

如果我尝试在SQL Server Management Studio中执行“选择NCHAR(55297)”,则会得到菱形问号,但是如果我执行“选择NCHAR(63489)”,则会得到某种点:

如果您想要的是字符值,则可以直接要求它们:

select Unicode(NCHAR(63489))


这将返回63489(作为整数)

如果希望将它们作为字节数组,则可以要求:

select CONVERT(varbinary(MAX), FieldThatIsAnNvarchar) from ThatTable

关于c# - 具有特殊F801字符的SQL Server nchar和.Net unicode,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8069971/

10-15 04:06