下面这段话转自:https://blog.csdn.net/lightlater/article/details/6326338

关于文本文件的文件头

第一 ANSI文件的文件头为空,不需要处理;

第二 UNICODE文件的文件头为0xFF,0xFE共计两个字节,读取时需要偏移两个字节再行读取;

第三 UTF-8文件的文件头为0xEF,0xBB,0xBF共计三个字节,读取时需要偏移三个字节后再行读取;

1.ansi格式txt文件

 void readAnsiTXT(){
string filename = "ansi.txt";
ifstream fin(filename.c_str());
if (!fin.is_open()){
cout << "open failed!\n";
}
char ch;
string msg = "";
while (fin.get(ch)){
msg += ch;
}
cout << msg << "\n";
}

2.Unicode格式

转载:https://blog.csdn.net/hxfhq1314/article/details/80344669

memset函数:https://baike.baidu.com/item/memset/4747579?fr=aladdin

setlocal函数:https://www.runoob.com/cprogramming/c-function-setlocale.html

void readUnicodeTXT(){
string filename = "unicode.txt";
ifstream fin;
fin.open(filename, ios::binary);
fin.seekg(, ios::beg);
wstring wstrLine;
while (!fin.eof())
{
wchar_t wch;
fin.read((char *)(&wch), );
wstrLine.append(, wch);
}
string str = ws2s(wstrLine);
str.erase(str.size()-, );//删除结尾重复的一个字符
cout << str << endl;
} std::string ws2s(const std::wstring& ws)
{
std::string curLocale = setlocale(LC_ALL, NULL); // C 库函数 char *setlocale(int category, const char *locale) 设置或读取地域化信息。
setlocale(LC_ALL, "chs");
const wchar_t* _Source = ws.c_str();
size_t _Dsize = * ws.size() + ;
char *_Dest = new char[_Dsize];
memset(_Dest, , _Dsize);
wcstombs(_Dest, _Source, _Dsize);
std::string result = _Dest;
delete[]_Dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
}

utf8格式:

 void readUtf8TXT(){
string str = "utf8.txt";
wstring res=L"";
std::locale loc("chs");
std::wcout.imbue(loc);
std::wifstream wif(str, ios::binary);
codecvt_utf8<wchar_t, 0x10ffff, std::consume_header>* codecvToUnicode = new codecvt_utf8<wchar_t, 0x10ffff, std::consume_header>;
if (wif.is_open()){
wif.imbue(std::locale(wif.getloc(), codecvToUnicode));
wstring wline;
while (getline(wif, wline)){
wstring convert;
for (auto c : wline){
if (c != L'\0' && c != L'?') convert += c;
}
res = res + convert;
}
wif.close();
}
for (wstring::iterator i = res.begin(); i != res.end(); i++){//将res中的'\r'换成'\n',否则输出异常
if (*i == '\r'){
*i = '\n';
}
}
wcout << res << endl;
}

Windows下用std::wifstream读取Unicode和UTF-8文本

转载:http://101.132.192.87/2019/08/29/windows%e4%b8%8b%e7%94%a8stdwifstream%e8%af%bb%e5%8f%96unicode%e6%96%87%e6%9c%ac/

Windows下使用std::wifstream读取Unicode文本的方法:

 std::locale loc("chs");                //windows下ok
std::wcout.imbue(loc);
// open as a byte stream
std::wifstream wif("路径", std::ios::binary);
std::codecvt_utf16<wchar_t, 0x10ffff, std::consume_header>* codecvtToUnicode = new std::codecvt_utf16 < wchar_t, 0x10ffff, std::consume_header >;
if (wif.is_open())
{
// apply BOM-sensitive UTF-16 facet
wif.imbue(std::locale(wif.getloc(), codecvtToUnicode));
std::wstring wline;
while (std::getline(wif, wline))
{
std::wstring convert;
for (auto c : wline)
{
if (c != L'\0' && c != L'?')
convert += c;
}
wcout << convert << endl;
}
wif.close();
//delete codecvtToUnicode; //new和delete,应该不用手动delete,在哪里delete都会崩溃(亲测)
}

Windows下使用std::wifstream读取UTF-8文本的方法:

 std::locale loc("chs");                //windows下ok
std::wcout.imbue(loc);
// open as a byte stream
std::wifstream wif("路径", std::ios::binary);
std::codecvt_utf8<wchar_t, 0x10ffff, std::consume_header>* codecvtToUnicode = new std::codecvt_utf8 < wchar_t, 0x10ffff, std::consume_header >;
if (wif.is_open())
{
// apply BOM-sensitive UTF-8 facet
wif.imbue(std::locale(wif.getloc(), codecvtToUnicode));
std::wstring wline;
while (std::getline(wif, wline))
{
std::wstring convert;
for (auto c : wline)
{
if (c != L'\0' && c != L'?')
convert += c;
}
wcout << convert << endl;
}
wif.close();
//delete codecvtToUnicode; //new和delete,应该不用手动delete,在哪里delete都会崩溃(亲测)
}

c++ 读取、输出txt文件的更多相关文章

  1. iOS案例:读取指定txt文件,并把文件中的内容输出出来

    用到的是NSString中的initWithContentsOfFile: encoding方法 // // main.m // 读取指定文件并输出内容 // // Created by Apple ...

  2. Java基础-输入输出-2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt

    2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt ...

  3. ZK中使用JS读取客户端txt文件内容问题

    最近写一个需求时遇到一个问题,用户需要通过点击一个按钮直接读取他自己电脑上D盘的一个txt文件内容显示到页面,因为项目现在是用ZK写的.我对于ZK也是刚刚了解不就,很多都还不是很熟.起初我是想用io流 ...

  4. 字节流,读取 a.txt 文件内容,并打印出来

    import java.io.FileInputStream;import java.io.IOException; /** 字节流,读取 a.txt 文件内容,并打印出来 */public clas ...

  5. 编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt

    package zuoye; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcep ...

  6. Python读取中文txt文件错误:UnicodeEncodeError: 'gbk' codec can't encode character

    with open(file,'r') as f: line=f.readline() i=1 while line: line=line.decode('utf-8') line=f.readlin ...

  7. Pandas——读取csv,txt文件

    """ 读取csv文件 该文本中的分割符既有空格又有制表符(‘/t’),sep参数用‘/s+’,可以匹配任何空格. """ import p ...

  8. C# 读取网络txt文件 并写在本地txt文件中

    public void WriteStream() { try { stirng ImagesPath = ImagesPath + "\\2013-09-27.txt"; Htt ...

  9. 2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt

    package zuoye; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; ...

随机推荐

  1. ASCII编码,将英文存储到计算机

    前面我们已经讲到,计算机是以二进制的形式来存储数据的,它只认识 0 和 1 两个数字,我们在屏幕上看到的文字,在存储之前都被转换成了二进制(0和1序列),在显示时也要根据二进制找到对应的字符. 可想而 ...

  2. bistoury的源码启动(二)

    bistoury.conf这个东东就是我们代码中的 -Dbistoury.conf=D:\openSource\bistoury\bistoury-proxy\conf 这样就能搞定了,一下子就能启动 ...

  3. Python requests库模拟浏览器行为的一些技巧记录

    如下都是一些经验之谈,不定期更新,喜欢可以关注哦. 忽略ssl报错 一些证书问题会导致程序报错,解决方法为在发送请求的时候,带上verify=False参数即可: result = requests. ...

  4. kuangbin专题 专题九 连通图 POJ 1236 Network of Schools

    题目链接:https://vjudge.net/problem/POJ-1236 题目:有向图,有若干个连通图,点之间有单向边边就可以单向传递信息,问: (1)至少需要发送几份信息才能使得每个点都传递 ...

  5. gbase安装教程

    一.安装前的准备工作 1.对网卡进行配置 [root@gbase8a ~]#vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADD ...

  6. js中map和filter方法,以及search方法

    链接:https://blog.51cto.com/11871779/2126561 search方法: 介绍: search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符 ...

  7. ubuntu更换pip源

    1.创建pip.conf文件 cd ~/.pip 当提示不存在时,创建它 mkdir ~/.pip 在.pip目录下创建一个pip.conf文件 touch pip.conf 2.编辑pip.conf ...

  8. Spring - Spring 常用注解

    概述 简单整理一些 Spring 的注解 这个算是一个 水一波 类型的整理 内容不全 分类可能有的地方不会太符合逻辑 而且时间也不太充裕 先把自己想写的写下来, 然后随缘整理吧 约定 版本 Sprin ...

  9. Docker - 命令 - docker network

    概述 docker network 命令 背景 newwork 是 docker 的一种资源 经常会使用 需要整理命令 1. 引入 概述 docker run 时, 将容器端口映射到宿主机 场景 启动 ...

  10. 你了解getBoundingClientRect()?

    理解:getBoundingClientRect用于获取某个元素相对于视窗的位置集合.集合中有top, right, bottom, left等属性. 1.语法:这个方法没有参数. rectObjec ...