2014-03-12 50 views
1

我有一段簡單的示例代碼的iostream打印橢圓錯

#include <string> 
#include <stdio.h> 
#include <iostream> 

int main() 
{ 
    std::cout << "Connecting to hello world server…" << std::endl; 
    printf ("Connecting to hello world server...\n"); 

    while(true) 
    { 
    } 
} 

在控制檯窗口中的第一行打印出橢圓作爲「A」與它上面的波浪線,第二行打印爲其中字符預期。

有人可以解釋爲什麼會發生這種情況嗎?

+0

編碼問題再次觸發。 – KitsuneYMG

+0

這是一種排字錯誤,第一種情況不是'...',而是一個unicode字符。 –

+0

似乎VS2010正在將...解釋爲UTF-8序列,但控制檯正在使用Windows-1252 ... Windows,它是如何工作的?! – Brian

回答

5

第一行沒有"..."但單個字符"…"

變化:

std::cout << "Connecting to hello world server…" << std::endl; 

std::cout << "Connecting to hello world server..." << std::endl; 
1

你的第一個省略號是Unicode水平省略,而第二個是連續三個時期。

1

在第一個中,您只有一個字符HORIZONTAL ELLIPSIS

在第二,它是3 period小號

1

由於其他人解釋的,而第二個使用三個週期中的第一使用單Unicode字符NEXT LINE (NEL) (U+0085)

至於爲什麼第一個不起作用,這是控制檯窗口的限制。它不像Unicode其他的Windows一樣工作,它可以與代碼頁一起工作。大多數字符的數字值將與其Unicode對應字符完全不同,因此會打印錯誤的字符。

在這種情況下,Code page 437中的\x85字符是您看到的à