我对文本编码有一个小问题。
我有两个从 SQL Server 2008 数据库(nvarchar 字段)加载的字符串
从数据库加载它们后,Visual Studio 2010 在监视窗口中显示如下:
str1 = "Test"
str2 = "Test"
但与str1 = str2
回报的比较False
如果我将这些字符串写入使用 UTF8 编码的文件,则结果如预期:
测试
测试
如果我将这些字符串写入使用 ANSI(默认)编码的文件,则结果与预期不符:
?测试
测试
将字符串转换为字节:
System.Text.Encoding.Default.GetBytes(str1) 'Returns ByteArray {63, 84, 101, 115, 116}
System.Text.Encoding.Default.GetBytes(str2) 'Returns ByteArray {84, 101, 115, 116}
System.Text.Encoding.UTF8.GetBytes(str1) 'Returns ByteArray {239, 187, 191, 84, 101, 115, 116}
System.Text.Encoding.UTF8.GetBytes(str2) 'Returns ByteArray {84, 101, 115, 116}
ANSI 编码的字节 63 或 str1 的 UTF8 编码的字节 239、187、191 来自哪里?
嗯,字节 239、187、191 是 UTF8 的BOM。这里的问题更可能是:为什么我得到 str1 的 BOM 而不是 str2?
(嗯,这些值是传递给将它们插入数据库的 web 服务的值,初始值由我无法控制的客户端传递给这个 web 服务)