Sid*_*and 5 c# unicode encoding
我试图替换从Excel电子表格检索的字符串中的一些不良字符.原因是我们的Oracle数据库使用的是WE8ISO8859P1字符集,它没有定义Excel"帮助"在文本中插入的几个字符(引号,em和en破折号等)因为我无法控制数据库或者如何创建Excel电子表格我需要用其他东西替换字符.
我将单元格内容检索为字符串,因此:
string s = xlRange.get_Range("A1", Missing.Value).Value2.ToString().Trim();
Run Code Online (Sandbox Code Playgroud)
在Visual Studio的Text Visualiser中查看字符串会显示要完整并正确检索的文本.接下来我尝试替换一个不需要的字符(在这种情况下是右边的卷曲引号):
s = Regex.Replace(s, "\u0094", "\u0022");
Run Code Online (Sandbox Code Playgroud)
但它没有任何作用(Text Visualiser显示它仍然存在).为了尝试验证我想替换的角色实际上在那里,我试过:
bool a = s.Contains("\u0094");
Run Code Online (Sandbox Code Playgroud)
但它返回false.然而:
bool b = s.Contains("”");
Run Code Online (Sandbox Code Playgroud)
返回true.
我对.NET中的字符串的理解(有点缺乏)是它们用UTF-16编码,而Excel可能使用ANSI.那么这是否意味着我需要更改Excel中出现的文本编码?或者我在这里做错了什么?任何建议将不胜感激.我已经阅读并重新阅读了我能找到的关于Unicode和编码的所有文章,但我仍然没有更聪明.
是的,.Net 中的字符串是UTF-16。
\n\n你做得对;也许你的十六进制数学不正确。\n你测试的字符不是"\\u0094"(不确定这就是你的意思)。以下对我有用:
((int)"\xe2\x80\x9d"[0]).ToString("X")回报"201D"
"\xe2\x80\x9d" == "\\u201D"回报true
"\\u0094" == ""(右侧是空字符串)返回false
许多 UTF-16 字符在文本可视化工具中看起来是空字符串,但它们可能是不可显示的字符,也可能是代理项的一部分(即,某些字符可能需要键入,"\\UXXXXXXXX"而其他字符则可以使用(四位数字)"\\uXXXX"。 )。我对这个领域的了解非常有限。
参考文献 - Jon Skeet的文章:
\n\n\n