声明并打印阿拉伯字符作为wchar_t

时间:2017-06-05 18:52:06

标签: c unicode

我试图将阿拉伯字符存储为wchar_t,然后将其打印到控制台,但无法使其工作。

我将控制台设置为UTF-8,如果我只是将它们输入控制台,阿拉伯字母就会显示(尽管没有加入)。

我已根据(How to initialize a wchar_t variable?)中的答案尝试了几种不同的方法,并且可以打印出其他unicode字符但不打印阿拉伯语...

到目前为止,我已尝试过:

下面的代码 - 给出了一个关于从没有强制转换的指针生成整数的错误:

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <locale.h>

int main ()
{
    wchar_t a = L"ي";

    setlocale(LC_ALL, "");
    wprintf (L" here is my character - %lc",a);


    return 0;
}

相同但使用单引号 - 运行但打印空白空间:

wchar_t a = L'ي';

unicode值本身 - 为其类型提供一个警告字符常量太长:

wchar_t a = L'\xd9\x84';

当我尝试使用非阿拉伯字符时似乎有效 - 如果我输入&#39; g&#39;它通过罚款和&#39; xd9&#39;给了我一个很好的U字符。我需要为阿拉伯语做些额外的事吗?

非常感谢任何帮助!我真的希望能够输入阿拉伯语而不必使用unicode号码。

我使用Windows和MinGW(尽管我还有问题,所以如果能解决问题就很乐意转换编译器)

1 个答案:

答案 0 :(得分:0)

对于第一个示例,您需要使用%s格式才有机会。我没有用阿拉伯语尝试过,所以我不知道会发生什么。显而易见的问题是阿拉伯语是从右到左,而控制台是从左到右设计的。但是将字符串打印为字符是行不通的。

wchar_t不用于UTF-8。 UTF-8使用plain char *(编码的主要点)。 wchar_t使用扩展的16位代码点。如果你查找阿拉伯语代码点并输入数字,你至少应该从wprintf()获得阿拉伯语输出。输入阿拉伯字形是编辑器的一个问题,就像C ++本身一样。