gpt4 book ai didi

c# - 替换从 Excel 读取的字符串中的特定 Unicode 字符

转载 作者:太空狗 更新时间:2023-10-29 23:10:15 24 4
gpt4 key购买 nike

我正在尝试替换从 Excel 电子表格检索到的字符串中的一些不需要的字符。原因是我们的 Oracle 数据库使用的是 WE8ISO8859P1 字符集,它没有定义 Excel 在文本中“帮助”插入的几个字符(大引号、em 和破折号等),因为我无法控制数据库或者 Excel 电子表格的创建方式 我需要用其他内容替换字符。

我将单元格内容检索到一个字符串中:

string s = xlRange.get_Range("A1", Missing.Value).Value2.ToString().Trim();

在 Visual Studio 的 Text Visualiser 中查看字符串会显示完整且正确检索的文本。接下来,我尝试替换一个不需要的字符(在本例中为右手弯引号):

s = Regex.Replace(s, "\u0094", "\u0022");

但它什么也没做(Text Visualiser 显示它仍然存在)。为了尝试验证我要替换的字符是否确实存在,我尝试了:

bool a = s.Contains("\u0094");

但它返回错误。然而:

bool b = s.Contains("”");

返回真。

我(有点缺乏)对 .NET 中的字符串的理解是它们是用 UTF-16 编码的,而 Excel 可能会使用 ANSI。那么这是否意味着我需要更改来自 Excel 的文本的编码?或者我在这里做错了什么?任何建议将不胜感激。我已经阅读并重新阅读了所有我能找到的关于 Unicode 和编码的文章,但仍然没有更明智。

最佳答案

Yes strings in .Net are UTF-16 .

你做对了;也许您的十六进制数学不正确。您测试的字符不是 "\u0094"(不确定这就是您的意思)。以下对我有用:

((int)"""[0]).ToString("X") 返回 "201D"

"”"== "\u201D" 返回 true

"\u0094"== ""(右侧为空字符串)返回 false

许多 UTF-16 字符在文本可视化工具中看起来是空字符串,但它们可能是无法显示的字符或代理项的一部分(即,某些字符可能需要键入 "\UXXXXXXXX" 而其他的你可以用(四位数字)"\uXXXX"。)。我对这个领域的了解非常有限。

引用文献 - Jon Skeet的文章:

关于c# - 替换从 Excel 读取的字符串中的特定 Unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7631288/

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