2013-07-11 49 views
3

如果您可以回答我的任何問題,那就太棒了。獲取Dev-C++內置程序以將UNICODE字符輸出到Windows命令行

這裏是獨家新聞:我正在爲泰國的11年級學生編程介紹泰國的編程課。到目前爲止,這一切進展順利,他們的英語水平足夠高,我可以用英語授課,讓他們用英語編寫課程,一切都很好,很棒。

但是,作爲非拉丁字符語言的發言者,我覺得他們至少應該瞭解UNICODE是什麼。我不會在它上測試它們,或者將它們與實現細節混淆起來,但我想向他們展示一個可以用泰文字符做I/O的UNICODE程序的例子。

我在下面的約束操作,其中沒有一個是可以改變的(至少在這個學期):

  • 程序必須在Windows 7上運行
  • 程序必須是C(不是C++)
  • 我們必須使用Dev-C++(v。4.9.9.3)作爲我們的IDE(我試圖說服管理員爲下個學期做出改變,但他們可能不想)
  • 程序應輸出到命令行(我希望它看起來像「我們迄今爲止編寫的程序)
  • 我希望它很容易設置和運行,儘管我並不反對使用批處理文件爲孩子們做一些設置工作。

這裏有多遠,我已經得到了,和我的問題有:

  • 在控制面板>地區>管理>非Unicode程序語言設置爲泰語。
  • 我使用「chcp 874」在命令行中設置Thai codepage,但鍵盤上的字符顯示爲垃圾字符。這可能是因爲鍵盤映射是錯誤的,還是我必須改變別的東西?
  • 我寫了一行程序:printf(「\ u0E01 \ n」);打印泰文字母中的第一個字母「ก」。這是正確的語法?
  • 我收到了一個編譯器警告,「通用字符只在C++和C99中受支持。」 Dev-C++不能編譯爲C99嗎?有沒有一種方法可以爲它獲得C99編譯器?
  • 我跑了代碼,並得到垃圾字符。我想這可能是因爲編譯器,命令行或其他許多事情。

我很想結束這個課程,輸出สวัสดีโลก,這個泰語相當於「Hello World!」。我做了大量的Google搜索,但是我發現的每個答案在這個特定情況下都不起作用,或者涉及到不同的IDE。

+0

請嘗試wprintf。 – doptimusprime

回答

1

我從來沒有使用過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作爲編譯器標誌的一部分。

希望這會做到這一點。

我會嘗試在我自己的系統上擺弄它,看看我們能得到多遠。如果我找到更多的線索,將更新答案:-)

+0

我設置了這個標誌,並採納了Dave關於寬字符的建議。它仍然不能正確地渲染到cmd,但是我將輸出傳送到一個文本文件並在那裏正確渲染,所以現在輸出是絕對正確的。謝謝! – user2571032

1

好的,這是我的一點幫助。我沒有使用Dev-C++作爲我的IDE,所以我無法幫助您使用IDE特定的東西,但以下是大多數C/C++編譯器的標準:

wprintf是對寬字符的printf實現(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++ Reference

使用L中的報價意味着你打算定義一個寬字符串之前。 (Unicode)的

希望幫助,

-Dave

+0

我改變爲寬字符,並採取艾哈邁德關於寬字符的建議。它仍然不能正確地渲染到cmd,但是我將輸出傳送到一個文本文件並在那裏正確渲染,所以現在輸出是絕對正確的。謝謝! – user2571032

+0

您可能希望將命令提示符的字體更改爲支持unicode字符的字體,因爲我認爲終端字體不支持它們。我非常歡迎你,我希望你們的班級爲你效勞。 –

0

如果您需要更改代碼頁在控制檯C程序,你可以在開始添加頁眉<stdlib.h>和線system("CHCP 874");的程序。

如果你需要一個免費的編譯器在Windows下用C99符合,你可以嘗試PellesÇ

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

相關問題