相关疑难解决方法(0)

C中的宽字符输入/输出是否始终读取/写入正确的(系统默认)编码?

我主要对类Unix系统(例如便携式POSIX)感兴趣,因为看起来Windows对于广泛的字符做了奇怪的事情.

读取和写入宽字符函数(例如getwchar()putwchar())总是"做正确的事",例如从utf-8读取并在设置区域设置时写入utf-8,或者我是否必须手动调用wcrtomb()和打印使用例如字符串fputs()?在我的系统(openSUSE 12.3)中$LANG设置为en_GB.UTF-8它们似乎做了正确的事情(检查输出我看到看起来像UTF-8,即使字符串是使用wchar_t存储并使用宽字符函数编写的).

但我不确定这是否有保证.例如cprogramming.com声明:

[宽字符]不应该用于输出,因为虚假零字节和其他具有共同含义的低ASCII字符(例如'/'和'\n')可能会散布在整个数据中.

这似乎表明输出宽字符(大概使用宽字符输出功能)可能会造成严重破坏.

由于C标准似乎根本没有提及编码,因此在使用wchar_t时我真的不知道是谁/何时/如何应用编码.所以我的问题基本上是当我的应用程序不需要知道所使用的编码时,如果只读取,编写和使用宽字符是正确的事情.我只需要字符串长度和控制台宽度(wcswidth()),所以在处理文本时使用wchar_t到处都是理想的.

c linux posix wchar-t

8
推荐指数
2
解决办法
2189
查看次数

标签 统计

c ×1

linux ×1

posix ×1

wchar-t ×1