|
|
1
7
为什么不把文件写成二进制文件呢。只需在std::ios::binary设置中使用ofstream。编辑那时应该能够解释它。不要忘记开头的Unicode标志0xFEFF。 你最好用图书馆写作,试试下面这些: http://www.codeproject.com/KB/files/EZUTF.aspx |
|
|
2
33
为了
|
|
|
3
14
|
|
|
4
4
C++有一种方法,可以在输出或文件写入中执行从宽字符到局部字符的转换。 Use 用于此目的的codecvt方面。 你可以用标准 std::codecvt_byname implementation .
并从列出的许多自定义codecvt实现的引用中进行选择。 编辑: |
|
5
2
有一个(特定于Windows的)解决方案应该适合您
here
. 基本上,转换
|
|
|
6
0
注意,宽流只输出char*变量,所以您可能应该尝试使用
|
|
|
7
0
你应该 不 如果要编写可移植代码,请使用UTF-8编码的源文件。对不起的。 std::wstring str = L"abcà dëefŸgâ¬hhhhhhhµa"; (我不确定这是否真的损害了标准,但我认为是的。但即便如此,为了安全,你也不应该。)
|
|
|
8
0
根据我处理不同字符编码的经验,我建议您只在加载时处理UTF-8,并节省时间。如果您尝试将内部表示存储在UTF-8中,那么您将面临一个痛苦的世界,因为单个字符可以是1字节到4之间的任何字符。因此,像strlen这样的简单操作需要查看每个字节来决定len,而不是分配的缓冲区(尽管可以通过查看字符序列中的第一个字节来优化,例如00..7f是单字节字符,c2..df表示2字节字符等)。 当人们指的是UTF-16时,通常会提到“Unicode字符串”,而在Windows上wchar是一个固定的2字节。在Windows中,我认为wchar_t只是:
完整的UTF-32 4字节表示很少需要,而且非常浪费,下面是Unicode标准(5.0)对它的说明:
简而言之,使用whcar_t作为您的内部表示,并在加载和保存时进行转换(除非您知道需要完整的Unicode,否则不要担心完整的Unicode)。 关于执行实际转换,请查看ICU项目: |
|
9
0
前段时间我也遇到过同样的问题,我在博客上写下了我找到的解决方案。你可能想看看它是否有用,尤其是函数
http://pileborg.org/b2e/blog5.php/2010/06/13/unicode-utf-8-and-wchar_t |
|
|
Jean Valjean · 在调用/连接LPCWSTR后定义wstring 11 年前 |