EPPlus 在 .xlsx 中以不正确的代码页给出 unicode 值
EPPlus gives unicode values in incorrect codepage in .xlsx
我正在开发一个使用 EPPlus 将结果输出到 .xlsx 文件的解析器。我使用以下代码
将几个俄语硬编码字符串作为结果 .xlsx 中某些单元格的值
ExcelWorksheet wsResult = package.Workbook.Worksheets.Add("Result");
wsResult.Cells["A1"].Value = "Абонент:";
出于某种原因,在生成的 .xlsx 中,我得到了错误代码页中的文本,因此它显示为“ÀáîíåíòÓ”而不是“Абонент”。我试着把 Unicode 编码如下
wsResult.Cells["A1"].Value = "\u0410\u0431\u043e\u043d\u0435\u043d\u0442:";
结果是正确的。但是我已经有很多这样的俄语字符串,我想避免将它们全部转换为代码。奇怪的是,在我早些时候用于这个项目的另一台机器上一切都很好。但是,当前的设置不同,所以我可能会遗漏一些设置。
当前设置是:
- Windows 8.1 64 位英语
- MS Visual Studio 2015 社区
- MS Office 2010 英文版
- 所有区域设置都设置为俄罗斯,包括。系统语言环境。
我在另一台机器上使用的设置一切正常:
- Windows 7 32bit 英文
- MS Visual Studio 2008 Express
- MS Office 2010 英文版
- 所有区域设置都设置为俄罗斯,包括。系统语言环境。
过去 48 小时我一直在寻找线索,但没有成功,我什至不确定该怪谁:Windows、Visual Studio、EPPlus 还是我自己。后者的可能性最大。任何帮助将不胜感激!
"ÀáîíåíòÓ" 是您使用 Crylic encoding 代码页 编码 "Абонент" 然后 解码 得到的字符串使用 utf-8 编码生成的字节。
这让我相信,在某些情况下,您的字符串使用 utf-8 进行编码,而在其他情况下使用 Crylic 进行编码,并且 EPPlus 始终将其解释为 utf-8。
我能看到的最简单的解决方案是确保所有字符串始终编码为 utf-8。如果它们是硬编码的,那么应该像从文件菜单的 高级保存选项 中选择 utf-8 一样简单:
但是,如果您从其他来源读取原始字符串文字(例如,从文本文件中读取),您首先需要知道它们是如何从读取它们的地方编码的,然后您可以使用Encoding class 重新编码为 utf-8。
鉴于您描述的症状,我怀疑您只需从高级保存选项中选择 utf-8 即可。 (如果我选择使用 Crylic 编码保存,我可以精确地重现你的问题。)
我正在开发一个使用 EPPlus 将结果输出到 .xlsx 文件的解析器。我使用以下代码
将几个俄语硬编码字符串作为结果 .xlsx 中某些单元格的值ExcelWorksheet wsResult = package.Workbook.Worksheets.Add("Result");
wsResult.Cells["A1"].Value = "Абонент:";
出于某种原因,在生成的 .xlsx 中,我得到了错误代码页中的文本,因此它显示为“ÀáîíåíòÓ”而不是“Абонент”。我试着把 Unicode 编码如下
wsResult.Cells["A1"].Value = "\u0410\u0431\u043e\u043d\u0435\u043d\u0442:";
结果是正确的。但是我已经有很多这样的俄语字符串,我想避免将它们全部转换为代码。奇怪的是,在我早些时候用于这个项目的另一台机器上一切都很好。但是,当前的设置不同,所以我可能会遗漏一些设置。
当前设置是:
- Windows 8.1 64 位英语
- MS Visual Studio 2015 社区
- MS Office 2010 英文版
- 所有区域设置都设置为俄罗斯,包括。系统语言环境。
我在另一台机器上使用的设置一切正常:
- Windows 7 32bit 英文
- MS Visual Studio 2008 Express
- MS Office 2010 英文版
- 所有区域设置都设置为俄罗斯,包括。系统语言环境。
过去 48 小时我一直在寻找线索,但没有成功,我什至不确定该怪谁:Windows、Visual Studio、EPPlus 还是我自己。后者的可能性最大。任何帮助将不胜感激!
"ÀáîíåíòÓ" 是您使用 Crylic encoding 代码页 编码 "Абонент" 然后 解码 得到的字符串使用 utf-8 编码生成的字节。
这让我相信,在某些情况下,您的字符串使用 utf-8 进行编码,而在其他情况下使用 Crylic 进行编码,并且 EPPlus 始终将其解释为 utf-8。
我能看到的最简单的解决方案是确保所有字符串始终编码为 utf-8。如果它们是硬编码的,那么应该像从文件菜单的 高级保存选项 中选择 utf-8 一样简单:
但是,如果您从其他来源读取原始字符串文字(例如,从文本文件中读取),您首先需要知道它们是如何从读取它们的地方编码的,然后您可以使用Encoding class 重新编码为 utf-8。
鉴于您描述的症状,我怀疑您只需从高级保存选项中选择 utf-8 即可。 (如果我选择使用 Crylic 编码保存,我可以精确地重现你的问题。)