Странный случай со строкой и специальным символом - PullRequest
0 голосов
/ 14 февраля 2010
#include <iostream>
#include <string>
using namespace std;

string mystring1, mystring2, mystring3 = "grové";

int main(){
  mystring1 = "grové";
  getline( cin, mystring2 );  //Here I type "grové" (without "")
  cout << "mystring1= " << mystring1 << endl;
  cout << "mystring2= " << mystring2 << endl;
  cout << "mystring3= " << mystring3 << endl;
  return 0;
}

Вывод вышеуказанного кода:

mystring1 = grov8
mystring2 = grové
mystring3 = grov8

хотя, когда я вырезал и вставил код, он выглядит так:

mystring1 = grovΘ
mystring2 = grové
mystring3 = grovΘ

Почему содержимое mystring2 отличается от mystring1 и mystring3?

Ответы [ 2 ]

5 голосов
/ 14 февраля 2010

Предполагается, что вы используете Microsoft Windows: ваш исходный код отличается от кодировки командной строки Windows.

Введите chcp в командной строке, чтобы увидеть текущую кодовую страницу консоли. (Мой 850)

У вас есть три варианта:

  • Измените кодовую страницу / кодировку вашего исходного кода на кодовую страницу / кодировку вашей консоли.
  • Измените кодовую страницу / кодировку консоли на кодовую страницу / кодировку исходного файла.
  • Используйте библиотеку (или Windows API) для изменения кодировки на лету.
0 голосов
/ 14 февраля 2010

Консоль Windows имеет кодировку cp 866 (на майский кириллический), а ваш файл имеет другое (UTF-8 или CP1251 (мой кириллический)).

Вы можете использовать функции Win API для решения этой проблемы

...