【问题标题】:Weird character "Â" before degrees Celcius symbol "°C"摄氏度符号“°C”之前的奇怪字符“”
【发布时间】:2009-09-10 17:46:21
【问题描述】:

一天前我问过这个question 关于希腊 Unicode 字符的问题,现在我有一个基于这个问题的问题。

提取所有数据后,我尝试准备将其导入 Excel。我不得不选择一个制表符分隔的文件,因为我的一些数据包含逗号(我很幸运!)。

在我将数据导入 Excel 后,我遇到的问题是一个非常奇怪的字符。

Notepad++ 中的列数据如下所示:

Total Suspended Solids @105°C   

Excel 单元格数据如下所示:

Total Suspended Solids @105°C

我不明白为什么会这样。这是否与度数符号的表示方式有关?

附言我这个问题中的符号是直接复制粘贴

【问题讨论】:

  • 将输出流格式显式设置为 UTF8 将更正 Excel 中的问题。 var sw = new System.IO.StreamWriter(fs, Encoding.UTF8)

标签: c# unicode


【解决方案1】:

您可以为您的文件使用 UTF-8 BOM。

【讨论】:

    【解决方案2】:
    1. (更有可能)Excel 将您的文本数据解释为 latin-1 或 windows-1252,而不是 UTF-8。如果您将 UTF-8 字节用于“°” (0xc2 0xb0) 并将每个字节解释为 latin-1 或 windows-1252 的字符,则“°”是您得到的。导入时是否有输入编码选项?
    2. (不太可能)Excel 正在做正确的事情,但您正在对数据进行双重编码(编码为 UTF-8,然后将其重新解释为 8 位编码并再次编码 作为 UTF-8 或任何其他 Unicode 编码)。 Notepad++ 的证据不利于这一点。

    【讨论】:

    • @Hobbis: 好的,但是原件在 Excel 中,这个特殊的“”字符不存在
    • 如果您将代码页从非 UTF8 转换为 UTF8,则往返数据可能会引入额外字符。
    • 度数字符在 Windows-1252、IBM-437 和 ISO Latin 1 中为 0xB0。当将其编码为 UTF-8 时,0xB0 变为 0xC2 0xB0。看起来 Excel 默认将其读取为“ANSI”。当您导入数据时,您可以通过选择“文件来源”告诉它明确使用 UTF-8 - 至少在 Excel 2003 中是这样的。
    • 或者,正如 Philippe Leybaert 指出的那样,您可以只使用 Windows-1252 编码而不是 UTF-8 编写文件,只要您不尝试使用任何在那个编码。
    【解决方案3】:

    我不确定,但我认为 Excel 需要 Windows-1252 字符编码,因此请确保使用 Encoding.GetEncoding("Windows-1252") 创建文本文件。

    例如:

    using (var writer = new StreamWriter(fileName,false,Encoding.GetEncoding("Windows-1252"))
    {
     ....
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多