数据库
首页 > 数据库> > c#-SQL Server上的编码问题

c#-SQL Server上的编码问题

作者:互联网

我正在使用SQL Server数据库;数据库实例的编码为“ SQL_Latin1_General_CP1_CI_AS”.

如下代码:

UPDATE ...
SET field = CHAR(136)
WHERE...

在字段中放置以下符号:ˆ

但!在Latin1代码表中,未定义127-159代码!它如何插入此符号?

更令人困惑的是,当我在C#中将此字段值读取为字符串变量并将其转换为char时,得到的代码是710,而不是136.

我尝试使用编码转换:

var latin1Encoding = Encoding.GetEncoding("iso-8859-1");
var test = latin1Encoding.GetBytes(field); // field is a string read from db

但是在这种情况下,我得到的代码为94,它是^(看起来很相似,但是不一样,我需要完全一样).

解决方法:

But! In Latin1 code table 127-159 codes are just not defined!

在ISO-8859-1中,定义了字符136,但这是很少使用且基本上没有意义的控制字符.

但是,尽管名称为“ Latin1”,SQL_Latin1_General_CP1_CI_AS却不是ISO-8859-1.这是西欧ANSI代码页1252,与ISO-8859-1类似,但是在128–159范围内有许多不同的符号.

代码页1252中的字符136是U 02C6修饰符字母圆圈重音ˆ;十进制代码点编号710.

in this case I get code 94 which is ^

是的,您要转换为不包含字符U 02C6的ISO-8859-1,因此您会获得“最合适的备用广告”,该字符看上去有点像您想要的字符.这通常是一件坏事;选择的许多后备设备都值得商question.您可以使用EncoderFallback更改此行为,例如,引发异常.

标签:encoding,character-encoding,latin1,c,sql-server
来源: https://codeday.me/bug/20191102/1988606.html