|
| 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.
| |
|
|