Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Kodowanie chińskich znaków

Ostatnio zmodyfikowano 2016-08-18 02:29
Autor Wiadomość
bati22
Temat założony przez niniejszego użytkownika
Kodowanie chińskich znaków
» 2016-08-15 17:07:07
Witam!
Chcę stworzyć program, który będzie wyświetlać jedno japońskie słowo - 漢字.

C/C++
#include <string>
#include <iostream>
using namespace std;

int main()
{
    string Kanji = "漢字";
    cout << Kanji << endl;
   
    return 0;
}

Konsola nie wyświetla mojego wyrazu. Co muszę zrobić, aby konsola wyświetliła chińskie znaki?
P-150894
Gibas11
» 2016-08-15 18:14:36
1. Zwykły string sobie z tym nie poradzi, użyj wstring.
2. Na Linuksie działa od ręki, na windzie musisz ustawić odpowiednie kodowanie znaków.
P-150895
bati22
Temat założony przez niniejszego użytkownika
» 2016-08-15 19:00:59
@Gibas11 Ok, dzięki za pomoc, jednak w jaki sposób ustawić odpowiednie kodowanie znaków? Muszę zmienić kodowanie konsoli na obsługujące chińskie znaki i do tego kodowania dostosować kodowanie pliku z kodem? Dlaczego używając wstring nie mogę skompilować kodu?
C/C++
#include <string>
#include <iostream>
using namespace std;

int main()
{
    wstring Kanji = "漢字";
    cout << Kanji << endl;
   
    return 0;
}
P-150896
carlosmay
» 2016-08-15 19:20:22
Dlaczego używając wstring nie mogę skompilować kodu?
Dla strumieni trzeba ustawić odpowiednią stronę kodową, a jak to już zależy od środowiska.

C/C++
wstring Kanji = L"漢字";
wcout << Kanji;
P-150897
j23
» 2016-08-15 19:28:48
@bati22, w windowsie do zmiany kodowania (wyjścia) konsoli masz funkcję SetConsoleOutputCP. Problem w tym, że kodowanie 932, bo takie jest dla japońskich znaków, nie chce zaskoczyć. Z tego co wyczytałem, trzeba przełączyć locale całego systemu na japońskie.

Możesz sprawdzić ten kod:
C/C++
if( SetConsoleOutputCP( 932 ) )
{
    setlocale( LC_CTYPE, ".932" ); // w MinGW tak musi być, normalnie użyłbym wcout.imbue()
   
    std::wstring Kanji = L"漢字";
   
    std::wcout << Kanji << L'\n';
}
P-150898
bati22
Temat założony przez niniejszego użytkownika
» 2016-08-15 19:40:43
@carlosmay Ok, dzięki. Niestety i tak nie da się go skompilować. To coś z Code::Blocks'em?
@j23 Dzięki za kod, sprawdzę go jak tylko ogarnę czemu nie chce mi się to skompilować. Jeżeli trzeba przełączyć locale całego systemu na japońskie to trochę słabo :(
C/C++
#include <string>
#include <iostream>
using namespace std;

int main()
{
    wstring Kanji = "漢字";
    wcout << Kanji << endl;
   
    return 0;
}
P-150899
j23
» 2016-08-15 19:41:46
@bati22, podaj błędy kompilacji.
P-150900
bati22
Temat założony przez niniejszego użytkownika
» 2016-08-15 19:44:06
D:\Prace i projekty\9rodzial.cpp||In function 'int main()':|
D:\Prace i projekty\9rodzial.cpp|7|error: conversion from 'const char [7]' to non-scalar type 'std::wstring {aka std::basic_string<wchar_t>}' requested|
D:\Prace i projekty\9rodzial.cpp|8|error: 'SetConsoleOutputCP' was not declared in this scope|

P-150901
« 1 » 2
  Strona 1 z 2 Następna strona