C ++ - 显示和存储日文字符

时间:2014-09-17 19:32:21

标签: c++ string winforms unicode visual-c++-2010-express

所以,我正在尝试使用C ++和Windows Forms来创建一个可以帮助我学习日语的应用程序(目前只有Hiragana和Katakana)。目的是能够创建一个程序,让用户选择他们想要使用的字符集(A到O,KA到KO等),并自由查看卡片或让程序在角色上测试它们。出于调试目的,我目前将View按钮设置为输出5个值到5个不同的文本框 - 罗马语发音,相应的字符,它在存储所有字符的数组中的位置,以及布尔值。

我的问题在于这些字符都显示为“?”,并且在编译时会收到多个警告。此警告的一个示例:

  

1> c:\ users \ cameron \ documents \ visual studio 2010 \ projects \ japanesecards \ japanesecards \ Form1.h(218):警告C4566:由universal-name-name'\ u3093'表示的字符无法表示当前代码页(1252)

这显示了46次,数组中的每个日文字符为1。数组的声明行是

std::string hiraList[5][11][2];

插入Romanji-Hiragana对的一个例子是,

hiraCheck[0][0][0] = "A";
hiraCheck[0][0][1] = "あ";

最后,使用以下代码将平假名插入到文本框中:

System::String^ displayText = gcnew String(hiraList[x][y][1].c_str());
textBox5 -> Text = displayText;

基本上,考虑到所有这些,我的问题是 - 如何让我的表单在文本框中正确显示日文字符?

1 个答案:

答案 0 :(得分:0)

好!我做了一些调整并尝试使用wchar_t,我找到了解决方案。

首先,我将hiraList数组缩减为二维数组,并将平假名字符移动到它们自己的数组中,定义如下:

wchar_t hiraChar[5][11];

并添加如下值:

hiraChar[0][0] = L'あ';

然后,我转到“查看”按钮的代码并进行了一些更改:

删除了声明和填充displayText变量的方法

更新了代码行,该代码行将textBox5的文本值分配给hiraChar [x] [y]

新代码的一行已贴在下面:

textBox5 -> Text = hiraChar[x][y].ToString();

本质上,程序现在为平假名创建三个变量 - 一个用于监控复选框,一个用于存储romanji值,另一个用于存储平假名字符。如果选中至少一个复选框,并按下视图按钮,则会向文本框输出五个内容 - 字符,其在数组中的位置(x和y是单独的框),其等效的罗马字和“真”值之前在开发中用于调试目的。