StringBuilder Char 数组中出现意外的中文字符

问题描述 投票:0回答:1

这更多的是一个好奇的问题。我们网络上的所有软件和硬件均位于英国。我正在使用 StringBuilder.AppendLine() 方法构建一些基本的 CSV 数据,以便在 Web 应用程序上下载。我正在调查 SB 对象中的价格列,发现 Char 数组中存在相当多的看似汉字的字符。我确信这可能是一些编码问题,因为当我将其粘贴出来时,我看不到从数据库中提取的符号,例如%符号等。尽管如此,它还是让我思考为什么会发生这种情况,或者这是一种巧妙的实现,.NET 可以将多个英文字符表示为单个中文字符?请参阅附图。

需要明确的是,从数据库填充到SB中的数据都是英文字符串和整数/大整数等/

将调试表中的数据复制到 Notepad++ 中会显示如下列表:

  1. b
  2. l
  3. e
  4. t
  5. “”“”
  6. ”,”
  7. “”“”
  8. K
  9. s
  10. q
  11. a
  12. l

调试器中数组的长度约为 4k 条目,粘贴到记事本时约为 2500 行。上面的双引号是复制和粘贴时看起来不像数组中单个字符的唯一条目。但我相信“”代表字符为空?

添加:根据下面的评论,这些字符不会仅在 Visual Studio 枚举窗口中显示在 CSV 中。

目标框架:net6.0 版本:7.0.102

访问 Visual Studio 枚举窗口:

将鼠标悬停在变量上并展开该行以获取上面的图像。单击 View 打开 Char 数组。

更新:最小可复制示例:

var csvBuilder = new StringBuilder();
string test = "144039058,385124005,3932411000001100,Atropine 1% eye drops 5 ml,Atropine 1% eye drops 5 ml,TEST Pharmaceuticals Ltd,No,Eye drops,5,ml,122.27,24.45";
for(int i = 0; i < 8; i++)
    csvBuilder.AppendLine(test);

我选择 8,因为这些字符似乎是在第 7 次或第 8 次迭代时添加的:

c# asp.net-core stringbuilder
1个回答
0
投票

我看起来您正在使用调试器来可视化

StringBuilder
(
m_ChunkChars
) 内的私有字段。这将是“非常”特定于实现的;也许 StringBuilder 正在进行某种奇怪的压缩,或者它是一个仅部分填充的数组,而您正在超越填充的部分,查看随机初始化的数据。
基本上,如果您必须深入研究您不拥有的类型的私有字段,那么有时结果令人惊讶,您不应该感到惊讶。我基本上会尽量避免以这种方式使用 IEnumerable Visualizer。

© www.soinside.com 2019 - 2024. All rights reserved.