【问题标题】:Strange occurence with string and special character字符串和特殊字符的奇怪出现
【发布时间】:2011-01-16 16:19:59
【问题描述】:
#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=grove
mystring3= grov8

虽然当我在这里剪切并粘贴代码时,它是:

mystring1=grovΘ
mystring2=grove
mystring3=grovΘ

为什么mystring2 的内容与mystring1 和mystring3 不同?

【问题讨论】:

  • 您可以通过删除 mystring3 和任何提及它来简化您的代码,它不会增加任何内容。另外,您缺少#include &lt;string&gt;
  • 你运行的是什么系统?你如何输入(即什么键序列)é?

标签: c++ string character-encoding special-characters


【解决方案1】:

Windows 控制台有 cp 866(可能是西里尔语)编码,而您的文件有其他(UTF-8 或 CP1251(我的西里尔语))。

你可以使用 Win API 函数来解决这个问题

【讨论】:

    【解决方案2】:

    假设您使用 Microsoft Windows:您的源代码与 windows 命令行的编码不同。

    在命令行中键入 chcp 以查看当前控制台代码页。 (我的是850)

    你有三个选择:

    • 将源代码的代码页/编码更改为控制台的代码页/编码。
    • 将控制台的代码页/编码更改为源文件的代码页/编码。
    • 使用库(或 Windows API)即时更改编码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-15
      • 2016-06-13
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      相关资源
      最近更新 更多