【发布时间】:2018-11-09 06:22:28
【问题描述】:
在将多字节控制台应用程序转换为 Unicode 时,我遇到了一个奇怪的问题,_tcprintf 和 WriteConsole 工作正常,但 _tprintf 打印错误的字符...
我已经追溯到使用 setlocale(LC_ALL, "C"),它使用基于 MS doc 的 1 个字节的 LC_CTYPE:
C 语言环境假定所有 char 数据类型都是 1 字节,并且它们的值始终小于 256。
但是,除了LC_CTYPE 之外的所有内容我都想保留"C",但我不知道该使用什么?
我认为使用 UTF16 的全部意义在于所有字符都可用,并且无论代码页或区域设置如何,都可以正确打印。
虽然在 Unicode 应用程序中将控制台输出设置为 UTF-8 (65001)(SetConsoleCP 当然与语言环境是分开的)并且输出 UTF16 也出现了显示正确字符的问题。
无论如何,有谁知道我应该在 Windows Unicode 控制台应用程序上为 UTF16 使用 LC_CTYPE 什么值?也许就像setlocale( LC_CTYPE, "" ); 一样简单?蒂亚!!
【问题讨论】:
-
为什么在2018年自愿使用utf16?!
标签: c utf-16 windows-console