- 主题:wcin 是怎么工作的
你这个跟C++没啥关系,完全是bash以及其它操作系统自带命令行程序的问题。
【 在 easior 的大作中提到: 】
: 问题是针对 macOS 平台上 clang 的。
: 先在 Windows 平台上 VS 中作如下测试(GCC 也试了一下):
: 1、不设置本地化策略集且源代码不含宽字符字面值
: ...................
--
FROM 76.126.252.*
是开个终端,但是这个终端本身也是一个程序。
不同操作系统用的不一样。
比如说linux一般常见的bash
windows一般常见的cmd
由于你系统版本不同,这个终端程序默认的字符编码和字体都会不一样。
要中文字符正常工作,需要:
1. 终端程序设置使用正确的字符编码和字体。
2. 你写的程序使用跟终端程度相同字符编码。
macOS我很少用,不过据我以前的经验mac对中文的支持可以很差。
你需要先搞清楚你用的终端程序对字符的处理是怎么样的。
【 在 easior 的大作中提到: 】
: 不明白C++程序交互的正确方法了,
: 非图形界面的程序不都是开个终端执行吗?
:
--
FROM 76.126.252.*
就是这个原因。
你需要
1. 弄清楚系统使用的字符编码集
2. 选择设置std::codecvt来做正确的转换
【 在 easior 的大作中提到: 】
: 我的终端locale如下:
: $ locale
: LANG="fr_FR.UTF-8"
: ...................
--
FROM 76.126.252.*
如我上面所述,试试std::codecvt?
【 在 easior 的大作中提到: 】
: 正如你看到的,
: 系统编码就是 UTF-8,clang 内码应该也是 UTF-8。
: 何况情形2(wcout)能工作,也说明不可能是这个原因造成的。
: ...................
--
FROM 76.126.252.*
wcin是implementation defined.鬼知道它怎么处理。
你只能把几种常见的都试试看了。
如果你确定mac是UTF-32,那你试试:
std::codecvt<char32_t, char8_t, std::mbstate_t>
std::locale的构造函数的参数里new一个
【 在 easior 的大作中提到: 】
: 感觉编码没问题,不知道要怎么转?
: 要说有问题,也就是wchar_t应该采用了UTF-32编码,不配置本地化策略集,wcin是按 C 读入(吗)?
: 你说的这种情况,猜测只能将codecvt用在locale的构造函数里,具体该怎么设置呢?
: ...................
--
FROM 76.126.252.*
std::locale a("en_US.UTF-8");
std::locale b(a, new std::codecvt_utf8<wchar_t>);
大概这样子吧。
【 在 easior 的大作中提到: 】
: 没有弄错的话,目前没有编译器能用char8_t吧?
: 猜测char32_t串与u8串的转码应该用
: codecvt_utf8<char32_t> 或 codecvt_utf8<wchar_t> 吧?
: ...................
--
FROM 76.126.252.*