【发布时间】:2015-02-08 07:36:54
【问题描述】:
我有一个基于 .NET 的 Excel 插件,它使用 C++/CLI 库来读取/写入专有文件。 C++/CLI 库链接到一些提供类来读取和写入这些文件的核心 C++ 库。核心类使用 std::string 和 std::i/ofstream 来读取/写入专有文件中的数据。
所以当保存数据时,它来自:
Excel >> .NET AddIn (string) >> C++/CLI Lib (System::String) >> C++ Core Lib (std::string)
一切都适用于简单文本 (ASCII) 文件。现在我有一个文本文件(ANSI 编码),其中包含一些日文字符,保存在日文机器上。我认为它默认使用 SHIFT-JIS 编码。该文件加载良好(我在 Excel 中看到的字符与在记事本中看到的相同),但如果我将其原封不动地保存回来,则字符将变为 ??。我认为这是因为 std::string 和 std::ofstream 类将其错误地写为简单的 ASCII 流。
我在读取文件时使用以下语法将它们转换为 .NET 字符串:
%String(mystring.c_str());
在写入时将它们从 .NET 字符串转换为 std::strings 的以下内容:
msclr::interop::marshal_as<std::string>(mydotnetstring)
在我看来,问题在于编码,但我不清楚到底发生了什么。我想了解为什么文件读取正确但写入不正确?
我已将我的应用程序修改为读/写 UTF-8,这解决了问题,但我仍然想知道根本问题。
【问题讨论】:
标签: c++ .net string unicode character-encoding