[英]C programming, unicode and the linux terminal
所以我要做的是使用C和宽字符将日文字符写入终端屏幕。
问题是我正在做什么,以便我可以修复它,我在使用宽字符时应该注意什么其他警告,你对我正在尝试做什么有任何其他评论吗?
坏代码:
#include <stdio.h>
#include <wchar.h>
int main( ) {
wprintf(L"%c\n", L"\x3074");
}
这不起作用,但我想知道原因。
当我尝试使用wchar_t来保存值时,问题只会变得更糟:
wchar_t pi_0 = 0x3074; // prints a "t" when used with wprintf
wchar_t pi_1 = "\x3074"; // gives compile time warning
wchar_t pi_2 = L"\x3074"; // gives compile time warning
所以我也想做这个工作,因为我打算让数据结构保存这些字符的字符串。
谢谢!
"\\x3074"
的类型是const char[]
, L"\\x3074"
的类型是const wchar_t[]
。
如果需要wchar_t
,请使用单引号:
L'\x3074'
%c
打印一个char
,但对于wchar_t
你需要一个%lc
。
代码中至少存在两个问题。
(还有一个假设是宽字符集是Unicode - 我似乎记得它总是适用于Linux,但它不是通用的)。
在正确配置的终端中,
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main( ) {
setlocale(LC_ALL, "");
wprintf(L"%ls\n", L"\x0152\x3074");
return 0;
}
应该管用。 如果没有,我将首先检查setlocale()和wprint()的结果。
(我添加了U + 0152,这是OE连字,所以我可以检查行为;我没有使用U + 3074的字体)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.