回答
其他线程中提供的大多数解决方案都会不必要地转换为过时编码,而不是Unicode编码。只需使用reinterpret_cast<const char*>
即可编写UTF-16文件,或使用WideCharToMultiByte
转换为UTF-8。
要离开这个问题,使用LPTSTR
而不是LPWSTR
现在没什么意义,因为旧的9x系列Windows完全过时并且不受支持。只需使用LPWSTR
和随处可见的“宽字符”(即,UTF-16代码单元)类型,如WCHAR
或wchar_t
。
这里是(希望)写入一个示例UTF-16或UTF-32(后者在Linux/OS X):
#include <fstream>
#include <string>
int main() {
std::ofstream stream("test.txt"); // better use L"test.txt" on Windows if possible
std::wstring string = L"Test\n";
stream.write(reinterpret_cast<const char*>(string.data()), string.size() * sizeof(wchar_t));
}
TTBOMK,但不保证'wofstream'将写入UTF-16。 IIRC,Dinkumware实现将写入(并读取FTM)UTF-8。 – sbi 2010-07-20 08:02:20
非常感谢,它工作得很好:) – 2010-07-20 08:03:53
@sbi:是的,我已经注意到在Linux上。 C++流只是吮吸。为了可靠地编写UTF-16,你似乎需要使用'ofstream'来防止C++的大脑死亡字符转换,并使用'reinterpret_cast'。如果Dinkumware库使用UTF-8,那很好,至少不是像Windows-1252这样的完全疯狂的选择。 – Philipp 2010-07-20 08:08:09
使用T2A宏。
IIUC,LPTSTTR
可能指向一个char
字符串或wchar_t
字符串,具体取决于预处理器指令。如果这是正确的,那么您需要在std::ofstream
和std::wofstream
之间切换,具体取决于预处理器指令。
看一看this answer。它处理控制台流之间的切换,具体取决于TCHAR
,但该方案也很容易适用于文件流。
- 1. 将lptstr转换为char *
- 2. 将char字符串转换为字符
- 3. 在Java中,如何将字符串转换为char或char字符串?
- 4. 将char转换为字符串
- 5. 将字符串转换为char *
- 6. 将int和char转换为字符串
- 7. C++将char转换为字符串
- 8. 如何将char []转换为字符串&
- 9. 将char转换为字符串
- 10. 如何将char转换为字符串?
- 11. 转换一个char“”或换行符为一个字符串
- 12. 将dictonary值转换为字符串以放入文本文件?
- 13. const无符号字符*转换为/从字符串或const char *
- 14. 如何将char字符串转换为wchar_t字符串?
- 15. 如何将char字符串转换为std字符串
- 16. 转换字符串流为char *
- 17. 将MYSQL_TIME数据类型转换为char *或C++字符串
- 18. 将HLOCAL转换为LPTSTR
- 19. Java - 将字符串逐行写入文件vs单行/无法将字符串转换为字符串[]
- 20. 将字符串转换为xml文件?
- 21. Ruby将字符串转换为文件
- 22. 将字符串转换为XML文件
- 23. 将char数组中的换行符转换为字符串?
- 24. 无法将字符串写入* char []
- 25. 转换一个char为字符串
- 26. 将字符串转换成char
- 27. 将字符串转换为使用Arduino类型的const char *
- 28. boost :: interprocess ::字符串转换为char *
- 29. 从Swift字符串转换为const char *
- 30. 将NULL字节的C字符串转换为char数组
重复 - http://stackoverflow.com/questions/342772/lptstr-to-char – DumbCoder 2010-07-20 07:50:40
抱歉未在搜索结果中显示 – 2010-07-20 07:51:22