我有一个包含现有数据的现有数据库,我无法更改它的结构或值。 在该数据库中,有一个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
}
答案 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场景,但部分支持以破坏我们需要的方式支持。