下面这段话转自: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. 阿里云CentOS7.2把默认语言修改成中文

    转载TimeK 最后发布于2017-04-19 14:43:35 阅读数 7578  收藏 展开 我是一个刚接触centos不久的新人,在这个问题上面也是找了好久的答案,百度百科和问答上面的都大同小异 ...

  2. Iframe 高度自适应,js控制Iframe 高度自适应

     Iframe 高度自适应, js控制Iframe 高度自适应, iframe自适应高度 ================================ ©Copyright 蕃薯耀 2019年12 ...

  3. Java+Selenium+Testng自动化测试学习(二)

    Java+Selenium+TestNG自动化测试框架整合 1.简化代码 封装一个定位元素的类,类型为ElementLocation package com.test; import org.open ...

  4. sql 中联合查询语句

    在查询语句中 两张表进行查询,可以通过 left join (左连接查询) :返回左表中的所有记录和右表中联结字段相等的记录  (意思就是左表中的数据会全部显示,右表中只会显示和左表中相等的字段) r ...

  5. unittest 测试套件使用汇总篇

    # coding=utf-8import unittestfrom inspect import isfunction def usage(): """also unit ...

  6. Redis-复制(MasterSlave)

    Redis的复制(Master/Slave) 是什么: 行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master以写为主,Slave ...

  7. JS高级---原型的引入,原型添加的方法解决数据共享

    原型的引入:解决:通过构造函数创建对象带来的问题,即浪费内存(一个对象开一个内存,多个对象开多个内存) 通过原型来添加方法,解决数据共享,节省内存空间 <script> function ...

  8. numpy-sum函数

    看一个例子就懂了 c = array([[[0, 1, 2, 0, 1, 2]], [[0, 1, 2, 0, 1, 2]]]) print('{0}\n'.format(c.shape)) prin ...

  9. docker安装后启动报错

    docker安装后启动不起来: 查看日志  /var/log/message    其中有一行为:  Your kernel does not support cgroup memory limit ...

  10. Android日常debug

    获取SD卡文件 File file=new File(Environment.getExternalStorageDirectory().toString()+"/Music", ...