具有特殊F801字符的SQL Server nchar和.Net unicode

时间:2011-11-09 18:48:28

标签: c# .net sql-server

我有一个包含现有数据的现有数据库,我无法更改它的结构或值。 在该数据库中,有一个nvarchar列,其中包含以F800开头向上的twilight unicode区域中的值。 当我在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
}

2 个答案:

答案 0 :(得分:1)

55297是D801,未定义?你可能想要f801这是63489吗?但看起来好像也没有定义。你想要哪个角色?

如果我在SQL Server Management工作室尝试“选择NCHAR(55297)”,我会回到钻石问号,但如果我“选择NCHAR(63489)”,我会得到某种点:

如果你想要的是字符值,你可以直接询问它们:

select Unicode(NCHAR(63489))

返回63489(整数)

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

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

答案 1 :(得分:0)

经过多次调查后,我没有找到任何方法。我找不到任何可以在这里工作的双向转换。

似乎某些unicode值适用于.Net不支持的某些奇怪的unicode场景,但部分支持以破坏我们需要的方式支持。