4

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

这是独家新闻:我正在为 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。

4

3 回答 3

1

好的,这是我的一点帮助。我不使用 Dev-C++ 作为我的 IDE,所以我不能帮助你处理 IDE 特定的事情,但以下是大多数 C/C++ 编译器的标准:

wprintfprintf宽字符(unicode)的实现。

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

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

#include <wchar.h>

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

wprintf很可能是您要查找的内容。

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

参考: wprintf - C++ 参考

在引号前使用 L 意味着您打算定义一个宽字符串。(统一码)

希望有帮助,

-戴夫

于 2013-07-11T05:14:45.413 回答
0

我从来没有使用过 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 作为编译器标志的一部分。

希望这能解决问题。

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

于 2013-07-11T05:03:35.387 回答
0

如果需要更改控制台 C 程序中的代码页,可以在程序开头添加标题<stdlib.h>和行。system("CHCP 874");

如果你需要windows下符合C99的免费编译器,可以试试Pelles C

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

它完全符合 C99。

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

L"Wide string\n"

您需要使用 wprintf() 等代替 printf()。

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

于 2013-08-29T04:39:30.837 回答