c++ - 无法将 Unicode(希腊语)字符保存到文件中
问题描述
我在将 Unicode (Greek) 字符保存到文件时遇到问题,问题是当程序的写入函数到达 CString 的希腊字符时。我保存英文字符没有问题。
我不知道我的代码哪里做错了。
提前致谢。
这是我的代码
void CCheckOmadesOroiDlg::SaveLathoiToFile()
{
CStringW sf;
CStringW str_to_save = L"";
str_to_save = L"Nikitria stili ";
for (int i = 0; i < 6; i++)
{
sf.Format(L"%d ", exada.vExades[geydomada].number[i]);
str_to_save += sf;
}
sf = L"\n\n";
str_to_save += sf;
sf.Format(L"Λαθοι Ομαδων απο=%d μεχρι=%d (%d)\n", glathoi.lathoiomadon_apo, glathoi.lathoiomadon_mexri, glathoi.lathoiomadon);
str_to_save += sf;
CString filename; filename.Format(_T("lathoi_%d.txt"), geydomada);
wofstream file(filename, ios::out);
streamsize n = str_to_save.GetLength()*sizeof(WCHAR);
file.write(str_to_save, n);
file.flush();
file.close();
}
解决方案
我找到了另一种将 Unicode 字符写入文件的方法。
这是代码。
void CCheckOmadesOroiDlg::SaveLathoiToFile()
{
CStringW sf;
CStringW str_to_save = L"";
str_to_save = L"Nikitria stili ";
for (int i = 0; i < 6; i++)
{
sf.Format(L"%d ", exada.vExades[geydomada].number[i]);
str_to_save += sf;
}
sf = L"\n\n";
str_to_save += sf;
sf.Format(L"Λαθοι Ομαδων απο=%d μεχρι=%d (%d)\n", glathoi.lathoiomadon_apo, glathoi.lathoiomadon_mexri, glathoi.lathoiomadon);
str_to_save += sf;
wchar_t* bufferwchar = new wchar_t[str_to_save.GetLength()];
bufferwchar = (wchar_t*)str_to_save.GetBuffer();
char filename[50]; sprintf_s(filename, "lathoi_%d.txt", geydomada);
FILE *stream;
// Open file in text mode:
if (fopen_s(&stream, filename, "wt,ccs=UNICODE") == 0)
{
fwrite(bufferwchar, sizeof(bufferwchar), str_to_save.GetLength()/2, stream);
fclose(stream);
}
}
推荐阅读
- swift - iOS Swift BLE UART,其中 didUpdateValueFor 仅被调用两次并退出
- javascript - Firebase - 尝试从数据库中获取项目时出错
- angularjs - 是否有降低 AngularJS 1.x 摘要周期数量的配置选项?
- java - GWT - 当另一个 CheckboxCell 被选中时,如何以编程方式取消选中一个 CheckboxCell?
- raspberry-pi - 如何使树莓派上的 wifi 密码无法访问?
- c# - 如何使用 SqlDataReader 在结构数组中存储多个值
- javascript - 返回元素类 post 表单提交
- javascript - JavaScript:属性函数是否被提升?
- python - 将字符串转换为有序字典
- java - 如何泛化我的界面