I / O ASCII码转换为外来字符

时间:2019-04-06 00:38:04

标签: c++ internationalization ascii

使用cout << "\n\u00f3\n << endl,我可以在Unix命令行上用换行符打印ó。一旦我开始尝试读取文件并打印包含字符的字符串,就会看到文字输出,而不是\ n \ u00f3 \ n。

我不确定这是因为文件读取技术使用字符数组还是我不知道是否存在其他细微差别。

有什么想法吗?

谢谢!

const char *filename ="spanish_project_sample1.txt";
FILE *file = fopen(filename, "r");
    int c;
    char *data;
    data = " ";
    while ((c=fgetc(file)) != EOF) {
        data = appendCharToCharArray(data, c);
    }
    printf("%s", data);

2 个答案:

答案 0 :(得分:0)

我查看了针对类似问题的JavaScript解决方案(例如FromCharCode),并在线找到了以下代码: https://ideone.com/Udo3hN

#include <cstdarg>
#include <iostream>

using namespace std;

string FromCharCode ( int num, ... )
{
  va_list arguments;  
  char ch; 
  string s;                 
  va_start ( arguments, num );           
  for ( int x = 0; x < num; x++ )        
   {
         ch = va_arg ( arguments, int ); 
         s = s + ch;
   }
  va_end ( arguments );   
  return s;

}
int main()
{
 cout<<FromCharCode (10,73,78,68,69,83,73,71,78,33,33) ;//<<endl;
 return 0;
}

具体来说,这似乎是读取字符的问题,因为例如在运行时而不是将'\ n'读取为值10,字符数组实际上会记录两个整数[92,110]。

使用硬编码的字符串,编译器将转义的字符解析为所需的值。

仍然欢迎任何建议或解决方案。

答案 1 :(得分:0)

用于逐行读取文件的C ++习惯用法是:

#include <fstream>
#include <iostream>

using namespace std;

int main(int argc, char **argv)
{
    string line;
    ifstream ifs;
    ifs.open(argv[1]);

    while(getline(ifs, line))
        cout << line << endl;
}

尝试一下。

您的问题可能是解释之一。如果文件中有“ \ n \ u00f3 \ n”,则该文件将读取并打印。如果文件中有“ó”(在UTF-16中存储为\ u00f3),则将获得所需的内容。 I / O例程不执行任何转换。

您还需要知道您的文件是UTF-8还是UTF-16,以便可以正确阅读。