Как я могу напечатать такую строку: €áa¢cée£
на консоли / экране? Я пробовал это:
#include <iostream>
#include <string>
using namespace std;
wstring wStr = L"€áa¢cée£";
int main (void)
{
wcout << wStr << " : " << wStr.length() << endl;
return 0;
}
который не работает. Даже сбивает с толку, если я удалю €
из строки, распечатка будет такой: ?a?c?e? : 7
но с €
в строке, ничего не печатается после символа €
.
Если я напишу тот же код на Python:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
wStr = u"€áa¢cée£"
print u"%s" % wStr
он правильно распечатывает строку на той же консоли. Чего мне не хватает в c ++ (ну, я просто новичок)? Ваше здоровье!!
Обновление 1: на основе предложения n.m.
#include <iostream>
#include <string>
using namespace std;
string wStr = "€áa¢cée£";
char *pStr = 0;
int main (void)
{
cout << wStr << " : " << wStr.length() << endl;
pStr = &wStr[0];
for (unsigned int i = 0; i < wStr.length(); i++) {
cout << "char "<< i+1 << " # " << *pStr << " => " << pStr << endl;
pStr++;
}
return 0;
}
Прежде всего, он сообщает 14
как длину строки: €áa¢cée£ : 14
Это потому, что он считает 2 байта на символ?
И все, что я получаю:
char 1 # ? => €áa¢cée£
char 2 # ? => ??áa¢cée£
char 3 # ? => ?áa¢cée£
char 4 # ? => áa¢cée£
char 5 # ? => ?a¢cée£
char 6 # a => a¢cée£
char 7 # ? => ¢cée£
char 8 # ? => ?cée£
char 9 # c => cée£
char 10 # ? => ée£
char 11 # ? => ?e£
char 12 # e => e£
char 13 # ? => £
char 14 # ? => ?
как последний вывод cout. Так что, я считаю, актуальная проблема все еще остается. Ваше здоровье!!
Обновление 2: на основе второго предложения n.m.
#include <iostream>
#include <string>
using namespace std;
wchar_t wStr[] = L"€áa¢cée£";
int iStr = sizeof(wStr) / sizeof(wStr[0]); // length of the string
wchar_t *pStr = 0;
int main (void)
{
setlocale (LC_ALL,"");
wcout << wStr << " : " << iStr << endl;
pStr = &wStr[0];
for (int i = 0; i < iStr; i++) {
wcout << *pStr << " => " << static_cast<void*>(pStr) << " => " << pStr << endl;
pStr++;
}
return 0;
}
И вот что я получаю в результате:
€áa¢cée£ : 9
€ => 0x1000010e8 => €áa¢cée£
á => 0x1000010ec => áa¢cée£
a => 0x1000010f0 => a¢cée£
¢ => 0x1000010f4 => ¢cée£
c => 0x1000010f8 => cée£
é => 0x1000010fc => ée£
e => 0x100001100 => e£
£ => 0x100001104 => £
=> 0x100001108 =>
Почему там указано 9
, чем 8
? Или это то, чего мне стоит ожидать? Ваше здоровье!!
# -*- coding: utf-8 -*-
в python? Как мне узнать или установить это в c ++? Я просто использую vim для написания скрипта. Ваше здоровье!! - person MacUsers   schedule 23.07.2011uniTest.cpp: UTF-8 Unicode c program text
. Я был бы удивлен, если бы это было не так. Vim используется одинаково для всех вещей, в то время как, например, python работает, а c ++ - нет. Чего-то еще вам не хватает? ваше здоровье! - person MacUsers   schedule 23.07.2011