2015-09-08 32 views
0

我是編程新手,正在研究C++教科書中的一些示例。我能夠完成大部分示例,但是當我嘗試執行以下操作時出現了一些問題:嘗試在類似於「Hello World!」的程序中顯示中文字符。(C++)。非Unicode語言(簡體中文)輸入/輸出

  1. 對於這個問題,關於輸入/非Unicode字符,如簡化中國的輸出,我想提供一些信息,以什麼我迄今所嘗試:

    我跑了「你好,世界!」程序代碼:使用C++的塊,並試圖用中文字符「你好」替換文本「Hello world」。我運行該程序,但在命令提示符下,輸出只是亂碼(亂碼)。所以,我在網上搜索信息,發現我必須將我的區域設置更改爲「簡體中國」。我這樣做,重新啓動我的電腦並再次運行程序。這一次,該程序的輸出是非Unicode字符,然而,它們是不正確的字符(這些是:作者),我也相信它也是日文的...在互聯網上有一些中文資源說明它成爲「你好」的編碼,但我不太確定。我只想把我寫在後面的文字(std :: cout < <「--- \ n」;)正確顯示,就像我在使用英文時一樣。我將如何獲得它將顯示我在代碼中寫入的內容:命令提示符處的阻止?

最後,有是彈出,說明該編碼已更改,因爲我使用了非法字符的提示...

+1

歡迎來到SO。你給我們提供了一些關於你所嘗試過的信息的好消息,但是這個問題會從這個社區中某個人試圖編譯的最小代碼片段中獲益。 – Mikhail

回答

1

已經嘗試了以下內容:

#include <iostream> 

int main() 
{ 
     std::cout << "你好" << std::endl; 
     return 0; 
} 

我得到的輸出:

你好 

對我來說,這似乎是相同的字符(我謙遜地道歉,如果我不做沒有看到你的差異)。這使我認爲,在執行過程中,一方面保存文件和/或編譯以及顯示字節到字符轉換時,問題在於字符到字節轉換的不匹配。

我的正確輸出是在使用g ++ 4.8.4的XUbuntu上。 cpp文件被保存用vim,它看起來像這樣:

00000000: 23 69 6e 63 6c 75 64 65 20 3c 69 6f 73 74 72 65 #include <iostre 
00000010: 61 6d 3e 0a 0a 69 6e 74 20 6d 61 69 6e 28 29 0a am>..int main(). 
00000020: 7b 0a 09 73 74 64 3a 3a 63 6f 75 74 20 3c 3c 20 {..std::cout << 
00000030: 22 e4 bd a0 e5 a5 bd 22 20 3c 3c 20 73 74 64 3a "......" << std: 
00000040: 3a 65 6e 64 6c 3b 0a 09 72 65 74 75 72 6e 20 30 :endl;..return 0 
00000050: 3b 0a 7d 0a -- -- -- -- -- -- -- -- -- -- -- -- ;.}.------------ 

正如你所看到的每一個字符被保存爲3個字節的UTF-8(編碼粗體位)序列:

  • 你 - 1110 - 字符77664
  • 好 - 1110 - 字符22909

由於在同一時間你有4個字符的文本,我認爲,在某種程度上,這些字節實際上被編譯爲UTF-8就好了,但後來被改爲別的東西。如果它們被認爲是UTF-16,它會嘗試生成3個字符(每個字符2個字節),但這不是一個可能的情況,因爲標準是以避免這種混淆的方式創建的,並且還因爲您實際上有4個字符,UTF-16無法使用少於2個字節的字符來生成字符。

在這一點上,我必須說,我沒有足夠的信息來嘗試進一步幫助你。請考慮提供您正在編譯的確切代碼,並且如果可能的話,還要提供它的十六進制表示。

+0

致OP:閱讀[utf8everywhere](http://utf8everywhere.org/) –