Nat*_*Nat 4 c# sql-server encoding character-encoding latin1
我正在使用 SQL Server 数据库;数据库实例编码为“SQL_Latin1_General_CP1_CI_AS”。
以下代码:
UPDATE ...
SET field = CHAR(136)
WHERE...
Run Code Online (Sandbox Code Playgroud)
在字段中输入以下符号: ˆ
但!在 Latin1 代码表中 127-159 代码只是没有定义!怎么插入这个符号?
更令人困惑的是,当我在 C# 中将此字段值读取为字符串变量并将其转换为字符时,我得到代码 710 而不是 136。
我尝试使用编码转换:
var latin1Encoding = Encoding.GetEncoding("iso-8859-1");
var test = latin1Encoding.GetBytes(field); // field is a string read from db
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我得到代码 94,它是 ^(看起来相似,但不一样,我需要完全一样)。
但!在 Latin1 代码表中 127-159 代码只是没有定义!
在 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 LETTER CIRCUMFLEX ACCENT, ˆ; 十进制代码点数 710。
在这种情况下,我得到代码 94,即 ^
是的,您要求转换为 ISO-8859-1,其中不包括字符 U+02C6,因此您会得到“最适合的后备”,该字符看起来有点像您想要的字符. 这通常是一件坏事;选择的许多后备方案都非常值得怀疑。您可以使用EncoderFallback更改此行为,例如改为引发异常。
| 归档时间: |
|
| 查看次数: |
2694 次 |
| 最近记录: |