gpt4 book ai didi

c# - SQL Server 上的编码问题

转载 作者:行者123 更新时间:2023-11-30 15:41:55 25 4
gpt4 key购买 nike

我正在使用 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,但它是一个很少使用且基本上没有意义的控制字符。

但是 SQL_Latin1_General_CP1_CI_AS,尽管名称为“Latin1”,但不是 ISO-8859-1。它是西欧 ANSI 代码页 1252,类似于 ISO-8859-1,但在 128–159 范围内有一堆不同的符号。

代码页 1252 中的字符 136 是 U+02C6 MODIFIER LETTER CIRCUMFLEX ACCENT,^;十进制代码点数 710。

in this case I get code 94 which is ^

是的,您要求转换为 ISO-8859-1,它不包含字符 U+02C6,因此您得到“最适合后备”,这是一个看起来有点像那个的字符一个你想要的。这通常是一件坏事;许多选择的后备方案都非常值得怀疑。您可以使用 EncoderFallback 更改此行为,例如改为抛出异常。

关于c# - SQL Server 上的编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7892716/

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