我可以编写一个适用于多种字符编码的控制台程序吗?

我可以编写一个适用于多种字符编码的控制台程序吗?

我正在用 C 编写一个控制台程序。

我希望运行程序的终端将其字符编码设置为 UTF-8。这意味着我向终端发送 UTF-8 编码的字符串,并期望从终端接收 UTF-8 编码的字符串。

但是,如果在我的程序运行时将终端设置为另一种字符编码(UTF-8 除外),那么我的程序将按预期停止工作。

那么有没有办法知道我的程序中终端设置为什么字符编码(以便我可以相应地改变我的程序行为)?即使有这样的方法,我是否应该费心让我的程序使用多种字符编码,或者只让它使用 UTF-8 就足够了?

答案1

UTF-8 有几个缺陷,因此不是中欧的典型编码。

编写假定 UTF-8 的程序是不好的做法,因为您甚至可能无法知道“字符”在字节流中的结尾位置。

一个像样的程序调用:

setlocale(LC_ALL, "")

在启动时和稍后使用以下函数:

mbtowc(&wc, input, amt)

转换从标准输入或文件读取的多字节输入。

然后,它将数据处理为宽字符,并通过以下方式将其转换回多字节数据:

wctomc(output, wc)

然后输出被打印到例如stdout。

相关内容