2010-03-22 28 views
47

Ví dụ:Làm thế nào tôi có thể in các giá trị wchar_t để điều khiển?

#include <iostream> 

using namespace std; 

int main() 
{ 
    wchar_t en[] = L"Hello"; 
    wchar_t ru[] = L"Привет"; //Russian language 
    cout << ru 
     << endl 
     << en; 
    return 0; 
} 

Mã này chỉ in giá trị HEX như địa chỉ. Làm thế nào để in chuỗi wchar_t?

+0

Các ver y đầu tiên Câu hỏi liên quan là http://stackoverflow.com/questions/1625531/c-wchar-to-stdcout-and-comparision –

+0

Trên hệ điều hành nào và sử dụng ứng dụng giao diện điều khiển nào? Một số bàn giao tiếp không hỗ trợ Unicode. –

+0

Windows 7. Trình biên dịch MSVS2008 – zed91

Trả lời

53

Chỉnh sửa: Điều này không hiệu quả nếu bạn đang cố gắng viết văn bản không thể được thể hiện bằng ngôn ngữ mặc định của bạn. :-(

Sử dụng std::wcout thay vì std::cout.

wcout << ru << endl << en; 
+3

Nó chỉ in chuỗi tiếng anh. Còn Nga thì sao? – zed91

+8

Bàn điều khiển sẽ không được bật Unicode. Chuyển hướng đầu ra là hangup, bị kẹt trong di sản char 8 bit. Nó chỉ có thể xuất văn bản chính xác trên một máy Nga với phông chữ giao diện điều khiển chính xác được tải. –

+0

Lưu ý rằng nếu bạn thử thao tác này để in ra bàn điều khiển Linux, bạn có thể sẽ kết thúc với các ký tự bị cắt xén vì hầu hết các hệ thống Linux không sử dụng mã hóa utf16. –

9

Tôi có thể đề xuất std::wcout không?

Vì vậy, một cái gì đó như thế này:

std::cout << "ASCII and ANSI" << std::endl; 
std::wcout << L"INSERT MULTIBYTE WCHAR* HERE" << std::endl; 

Bạn có thể tìm thêm thông tin trong một câu hỏi liên quan here.

+0

Kiểm tra xem điều này có hoạt động với ngôn ngữ Nga hay không (copypaste nó). Đối với tôi nó không. –

+0

Xem chủ đề này về cách trộn các 'fout' và' wcout' foibles. https://stackoverflow.com/questions/8947949/mixing-cout-and-wcout-in-same-program –

0

Bạn có thể sử dụng sử dụng một mảng char bình thường mà là thực sự đầy utf-8 ký tự. Điều này sẽ cho phép trộn các nhân vật qua ngôn ngữ.

-3

chúng ta không tìm cách dễ dàng!

int i = 0; 
while (ru[i]) { 
    std::cout << (char)ru[i]; 
    i++; 
} 
+1

Bạn có thể giải thích thêm về điều đó không? –

+2

Nếu điều này làm việc, sẽ không có lý do cho các ký tự rộng ... – opetroch

0
#include <iostream> 
using namespace std; 
void main() 
{ 
setlocale(LC_ALL, "Russian"); 
cout << "\tДОБРО ПОЖАЛОВАТЬ В КИНО!\n"; 
} 
+0

Bạn có thể cải thiện câu trả lời này bằng cách cung cấp giải thích để đi với mã của bạn. –

+0

Chào mừng bạn đến với Stack Overflow! Mặc dù mã này có thể giúp giải quyết vấn đề, nó không giải thích _why_ và/hoặc _how_ nó trả lời câu hỏi. Việc cung cấp ngữ cảnh bổ sung này sẽ cải thiện đáng kể giá trị lâu dài của nó. Vui lòng [sửa] câu trả lời của bạn để thêm giải thích, bao gồm những giới hạn và giả định được áp dụng. –

Các vấn đề liên quan