获取Dev-C ++构建的程序以将UNICODE字符输出到Windows命令行

如果你能回答我的任何问题,那就太棒了。

这是独家新闻:我正在向泰国11年级学生介绍泰国的编程课程。 到目前为止它一直很好,他们的英语水平足够高,我可以用英语教学,让他们用英语写程序,一切都很好,花花公子。

然而,作为非拉丁字符语言的发言者,我觉得他们至少应该了解UNICODE是什么。 我不会对它进行测试或者将它们与实现细节混淆,但我想向他们展示一个可以用泰语字符进行I / O的UNICODE程序示例。

我在以下限制条件下操作,其中没有一个可以更改(至少在本学期):

  • 该程序必须在Windows 7上运行
  • 程序必须是C(不是C ++)
  • 我们必须使用Dev-C ++(v.4.9.9.3)作为我们的IDE(我将尝试说服管理员在下学期改变,但他们可能不想)
  • 该程序应该输出到命令行(我希望它“看起来像”我们迄今为止编写的程序)
  • 我希望它易于设置和运行,但我不反对包括批处理文件为孩子们做一些设置工作。

这是我已经走了多远,以及我的问题:

  • 在控制面板>区域>管理>非UNICODE程序的语言设置为泰语。
  • 我使用“chcp 874”在命令行中设置泰语代码页 ,但键盘中的字符显示为乱码。 这可能是因为键盘映射是错误的还是我必须改变别的东西?
  • 我用以下行编写了一个程序:printf(“\ u0E01 \ n”); 打印ก,泰语字母表中的第一个字母。 这是正确的语法吗?
  • 我收到一个编译器警告“只有C ++和C99支持通用字符”。 Dev-C ++不能编译成C99吗? 有没有办法让它得到一个C99编译器?
  • 我运行代码并得到垃圾字符。 我想这可能是因为编译器,命令行或任何其他东西。

我想用一个输出สวัสดีโลก的程序来结束这个课程,泰语相当于“Hello World!” 我已经完成了大量的谷歌搜索,但我发现的每个答案要么在这个特定情况下不起作用,要么涉及不同的IDE。

好的,这是我的帮助。 我没有使用Dev-C ++作为我的IDE,所以我无法帮助您解决IDE特定问题,但以下是大多数C / C ++编译器的标准:

wprintf是宽字符(unicode)的printf实现。

使用宽字符时,您将使用wchar_t代替char来定义字符串。

所以你可能会做这样的事情

 #include  int main(int argc, char** argv) { wchar_t* str = L"สวัสดีโลก"; wprintf(L"%s", str); system("pause"); return 0; } 

wprintf很可能是你正在寻找的。

通过研究wchar.h头文件,可以找到打印和操作宽字符串的其他函数。

参考: wprintf – C ++参考

在引号之前使用L表示您打算定义一个宽字符串。 (Unicode)的

希望有所帮助,

戴夫

我从未使用过DEV-C ++ IDE :-)但是,在阅读之后我看到dev-c ++版本4.9.9.3使用了gcc-3.5.4 mingw端口。 哪个具有“完成”的通用字符支持状态,请参阅http://gcc.gnu.org/gcc-3.4/c99status.html以获取详细信息。 您必须更改IDE配置,以便编译器使用-std = c99作为编译器标志的一部分。

希望这会成功。

我将尝试在我自己的系统上摆弄它,看看我们能走多远。 如果我找到更多线索,将更新答案:-)

如果需要在控制台C程序中更改代码页 ,可以添加标题和行system("CHCP 874"); 在该计划的开始。

如果您需要在Windows下符合C99的免费编译器,您可以尝试使用Pelles C

http://www.christian-heffner.de/index.php?page=download&lang=en

它完全符合C99。

您必须使用具有以下语法的宽字符串常量:

 L"Wide string\n" 

而不是printf(),你需要使用wprintf()等。

http://pubs.opengroup.org/onlinepubs/7908799/xsh/wchar.h.html