繁体   English   中英

C编程,unicode和linux终端

[英]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

代码中至少存在两个问题。

  • Kenny指出了第一个,格式与参数不符
  • 第二个是你错过了对setlocale()的调用

(还有一个假设是宽字符集是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM