/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
UTF-8 til locale på Win32
Fra : Bjoern


Dato : 18-04-09 04:07

Hej

Jeg forsøger at indlæse en XML file i UTF-8 format og udskrive nogle
feltværdier i en kommando-prompt, men std::cout udskriver nogle
underlige tegn. Min kommando-prompt kører med code-page 850.

Jeg konverterer UTF-8 til "Locale" på følgende måde:

std::string Utf8ToLocal(const std::string& input)
{
wchar_t wstr[MAX_STRING_LENGTH] = {0};
char str[MAX_STRING_LENGTH] = {0};
size_t size = MultiByteToWideChar(CP_UTF8, 0, input.c_str(), -1,
wstr, MAX_STRING_LENGTH);
size = wcstombs(str, wstr, MAX_STRING_LENGTH);
return str;
}

Hvis et felt indeholder "æøå" udskriver den dog nogle underlige
karakterer i kommando-prompt'en. Nogen der ved hvordan man laver en
konvertering som kan udskrives i kommando-prompt og ligeledes
konvertere tilbage igen til UTF-8?

-- Bjørn

 
 
Arne Vajhøj (23-04-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 23-04-09 01:07

Bjoern wrote:
> Jeg forsøger at indlæse en XML file i UTF-8 format og udskrive nogle
> feltværdier i en kommando-prompt, men std::cout udskriver nogle
> underlige tegn. Min kommando-prompt kører med code-page 850.
>
> Jeg konverterer UTF-8 til "Locale" på følgende måde:
>
> std::string Utf8ToLocal(const std::string& input)
> {
> wchar_t wstr[MAX_STRING_LENGTH] = {0};
> char str[MAX_STRING_LENGTH] = {0};
> size_t size = MultiByteToWideChar(CP_UTF8, 0, input.c_str(), -1,
> wstr, MAX_STRING_LENGTH);
> size = wcstombs(str, wstr, MAX_STRING_LENGTH);
> return str;
> }
>
> Hvis et felt indeholder "æøå" udskriver den dog nogle underlige
> karakterer i kommando-prompt'en. Nogen der ved hvordan man laver en
> konvertering som kan udskrives i kommando-prompt og ligeledes
> konvertere tilbage igen til UTF-8?

string Utf8ToLocal(const string& input)
{
wchar_t wstr[MAX_STRING_LENGTH] = {0};
char str[MAX_STRING_LENGTH] = {0};
size_t size = MultiByteToWideChar(CP_UTF8, 0, input.c_str(), -1,
wstr, MAX_STRING_LENGTH);
size = WideCharToMultiByte(850, 0, wstr, size, str,
MAX_STRING_LENGTH, NULL, NULL);
return str;
}

Arne

PS: Og den anden vej er formentligt kun et spørgsmål om at bytte om
på CP_UTF8 og 850.

Bjoern (15-05-2009)
Kommentar
Fra : Bjoern


Dato : 15-05-09 05:35

Øh, glemte vist at sige tak! Det virker forresten.

On Apr 23, 2:06 am, Arne Vajhøj <a...@vajhoej.dk> wrote:
> Bjoern wrote:
> > Jeg forsøger at indlæse en XML file i UTF-8 format og udskrive nogle
> > feltværdier i en kommando-prompt, men std::cout udskriver nogle
> > underlige tegn. Min kommando-prompt kører med code-page 850.
>
> > Jeg konverterer UTF-8 til "Locale" på følgende måde:
>
> > std::string Utf8ToLocal(const std::string& input)
> > {
> >     wchar_t wstr[MAX_STRING_LENGTH] = {0};
> >     char str[MAX_STRING_LENGTH] = {0};
> >     size_t size = MultiByteToWideChar(CP_UTF8, 0, input.c_str(), -1,
> > wstr, MAX_STRING_LENGTH);
> >     size = wcstombs(str, wstr, MAX_STRING_LENGTH);
> >     return str;
> > }
>
> > Hvis et felt indeholder "æøå" udskriver den dog nogle underlige
> > karakterer i kommando-prompt'en. Nogen der ved hvordan man laver en
> > konvertering som kan udskrives i kommando-prompt og ligeledes
> > konvertere tilbage igen til UTF-8?
>
> string Utf8ToLocal(const string& input)
> {
>      wchar_t wstr[MAX_STRING_LENGTH] = {0};
>      char str[MAX_STRING_LENGTH] = {0};
>      size_t size = MultiByteToWideChar(CP_UTF8, 0, input.c_str(), -1,
> wstr, MAX_STRING_LENGTH);
>      size = WideCharToMultiByte(850, 0, wstr, size, str,
> MAX_STRING_LENGTH, NULL, NULL);
>      return str;
>
> }
>
> Arne
>
> PS: Og den anden vej er formentligt kun et spørgsmål om at bytte om
>      på CP_UTF8 og 850.


Søg
Reklame
Statistik
Spørgsmål : 177554
Tips : 31968
Nyheder : 719565
Indlæg : 6408857
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste