首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用cyrillic读取文件

用cyrillic读取文件
EN

Stack Overflow用户
提问于 2010-02-16 22:08:16
回答 4查看 2.1K关注 0票数 0

我必须打开带有西里尔符号的文件。我已将文件编码到utf8中。下面是一个例子:

你的家人不能为你买一套戏服吗? (C)ru:Невашасемьяпозволитьсебекостюмдлявас

如何打开文件:

代码语言:javascript
复制
ifstream readFile(fileData.c_str());
while (!readFile.eof())
{
  std::getline(readFile, buffer);
  ...
}

第一个问题是,在文本'en‘之前有一些符号(我在调试器中看到了这个):

“易懂”,“至少”

另一个问题是西里尔的符号:

“ru: 0.5°、25°、25°、25°、Œˆ、ru、ru、R

怎么了?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-16 22:46:35

在文本'en‘之前有一些符号

这是一个伪BOM,是将U+FEFF字节顺序标记字符编码为UTF-8的结果.

由于UTF-8是一种没有字节顺序的编码,因此不应该使用faux-BOM,但不幸的是,相当多的现有软件(特别是在MS世界中)仍然使用。将消息文件加载到文本编辑器中,并将其再次保存为UTF-8,如果特别列出的话,则使用“UTF-8无BOM”编码。

ru:

这就是当您有一个UTF-8字节字符串(代表наименьший),并打印它就像一个代码页1252 (Windows西欧)字节字符串一样。这不是输入问题;您已经读取了字符串OK,并有一个UTF-8字节字符串。但是,在您没有引用的代码中,它将输出为cp1252。

如果您只是将其打印到控制台,这是意料之中的,因为控制台总是使用系统默认代码页(在西部Windows安装上使用1252),而不是使用UTF-8。如果需要将Unicode发送到控制台,则必须将字节转换为本机-Unicodewchar​,并从那里写入它们。我不知道你的琴弦的最终目的地是什么.如果您只打算将它们写入另一个文件或其他文件,您只需将它们保持为字节,而不关心它们所处的编码方式。

票数 3
EN

Stack Overflow用户

发布于 2010-02-16 23:51:09

我想你的操作系统是窗户。有几种方法很简单:

  1. 使用wchar_t,wstring,wifstream等。
  2. 使用icu库
  3. 使用其他超级puper库(它们真的很多)

注意:对于控制台打印,您必须使用WinApi函数将UTF-8转换为cp866 (我默认的cyrilic编码cp1251),因为windows控制台只支持dos编码。

注意:对于文件打印,您需要知道使用什么编码使用您的文件。

票数 1
EN

Stack Overflow用户

发布于 2010-02-16 22:24:26

使用libiconv在读取后将文本转换为可用的编码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2276725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档