#include <iostream>
#include <assert.h>
#include <fstream>
#include <string>
#include <string.h>
using namespace std; #ifdef _WIN32
#include <Windows.h>
#endif typedef enum FileType
{
FileType_ANSI = ,
FileType_UNICODE,
FileType_UTF8
}FILETYPE; #ifdef _WIN32
string UTF8ToGB(const char* str);
#endif FILETYPE GetTextFileType(const std::string & strFileName);
string ReadTextFile(const std::string & strFileName); int main()
{
string json = ReadTextFile("/tmp/a.json"); getchar(); return ;
} FILETYPE GetTextFileType(const std::string & strFileName)
{
FILETYPE fileType = FileType_ANSI;
std::ifstream file;
file.open(strFileName.c_str(), std::ios_base::in);
bool bUnicodeFile = false; if (file.good())
{
char szFlag[] = { };
file.read(szFlag, sizeof(char) * );
if ((unsigned char)szFlag[] == 0xFF
&& (unsigned char)szFlag[] == 0xFE)
{
fileType = FileType_UNICODE;
}
else if ((unsigned char)szFlag[] == 0xEF
&& (unsigned char)szFlag[] == 0xBB
&& (unsigned char)szFlag[] == 0xBF)
{
fileType = FileType_UTF8;
}
} file.close();
return fileType;
} string ReadTextFile(const std::string & strFileName)
{
FILETYPE fileType = GetTextFileType(strFileName);
if (fileType != FileType_UTF8)
{
cout << "UTF-8 file needed!" << endl;
return "";
} FILE * fp = NULL;
fp = fopen(strFileName.c_str(), "rb");
fseek(fp, , SEEK_END);
size_t size = ftell(fp);
fseek(fp, , SEEK_SET); std::string result; if (fp != NULL)
{
// UTF-8 file should offset 3 byte from start position.
fseek(fp, sizeof(char) * , );
int buferSize = (int)size - ;
char* szBuf = new char[buferSize + ];
memset(szBuf, , sizeof(char) * (buferSize + ));
fread(szBuf, sizeof(char), buferSize, fp);
result.append(szBuf);
delete szBuf;
} fclose(fp); #ifdef _WIN32
result = UTF8ToGB(result.c_str());
#endif return result;
} #ifdef _WIN32
string UTF8ToGB(const char* str)
{
string result;
WCHAR *strSrc;
LPSTR szRes; int i = MultiByteToWideChar(CP_UTF8, , str, -, NULL, );
strSrc = new WCHAR[i + ];
MultiByteToWideChar(CP_UTF8, , str, -, strSrc, i); i = WideCharToMultiByte(CP_ACP, , strSrc, -, NULL, , NULL, NULL);
szRes = new CHAR[i + ];
WideCharToMultiByte(CP_ACP, , strSrc, -, szRes, i, NULL, NULL); result = szRes;
delete[]strSrc;
delete[]szRes; return result;
}
#endif

c++ 读取 utf-8 文件到 string的更多相关文章

  1. InputStream读取文件到string后OutputStream到文件,按String和Bytes拷贝

    http://www.iteye.com/problems/72150 写了一段代码 大体是 InputStream读取文件到string后OutputStream到文件 遇到的问题为TXT文件大小格 ...

  2. 读取本地json文件,转出为指定格式json 使用Base64进行string的加密和解密

    读取本地json文件,转出为指定格式json   引用添加Json.Net 引用命名空间 using Newtonsoft.Json //读取自定目录下的json文件StreamReader sr = ...

  3. .NET Core的文件系统[1]:读取并监控文件的变化

    ASP.NET Core 具有很多针对文件读取的应用.比如我们倾向于采用JSON文件来定义配置,所以应用就会涉及针对配置文件读取.如果用户发送一个针对物理文件的HTTP请求,应用会根据指定的路径读取目 ...

  4. 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 ...

  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. POI读取/写入Excel文件

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

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

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

  8. 使用HttpWebRequest以及HttpWebResponse读取Http远程文件

     主页>杂项技术>.NET(C#)> 使用HttpWebRequest以及HttpWebResponse读取Http远程文件 jackyhwei 发布于 2010-08-15 21: ...

  9. JCIFS读取远程服务器文件过慢的解决方法

    JCIFS读取远程服务器文件过慢的解决方法 发表于3年前(2013-07-12 11:23)   阅读(1174) | 评论(0) // 我要收藏"; var favor_del = &qu ...

  10. JNI读取assets资源文件

    源自:http://www.rosoo.net/a/201112/15459.html assets目录底下的文件会被打包到一个apk文件里,这些资源在安装时他们并没被解压,使用时是直接从apk中读取 ...

随机推荐

  1. rsyslog+loganalyzer日志服务器,无法添加报表模板解决

    loganalyzer搭建成功后,各方面功能都算正常但是发现不能创建报表模板,提示报错 mysql错误:'字段列表'中的未知列'Source1' mysql错误号:1054 解决方案:

  2. java面试02——基础

    1. JDK . JRE 和JVM有什么区别? JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境. JRE:Java Runtim ...

  3. 摘抄 <关于 作为>

    出路在哪里?出路在于思路! 其实,没有钱.没有经验.没有阅历.没有社会关系,这些都不可怕.没有钱,可以通过辛勤劳动去赚:没有经验,可以通过实践操作去总结:没有阅历,可以一步一步去积累:没有社会关系,可 ...

  4. php 各种扩展 - 都有

    https://windows.php.net/downloads/pecl/releases/

  5. jpa 中的save()方法

    @RequestMapping(value = "", method = RequestMethod.POST) public String postAccount(@Reques ...

  6. Spring 核心之IOC 容器

    核心概念: IOC(Inversion of Control)控制反转:所谓控制反转,就是把原先我们代码里面需要实现的对象创建.依赖的代码,反转给容器来帮忙实现. DI(Dependency Inje ...

  7. EM算法理解的九层境界

    EM算法理解的九层境界 EM 就是 E + M EM 是一种局部下限构造 K-Means是一种Hard EM算法 从EM 到 广义EM 广义EM的一个特例是VBEM 广义EM的另一个特例是WS算法 广 ...

  8. JAVA中的23种设计模式

    http://blog.csdn.net/chmask/article/details/2631485 http://www.cnblogs.com/hnrainll/archive/2011/12/ ...

  9. pluginManagement的坑

    想用protobuf-maven-plugin插件,用了<pluginManagement/>标签包裹<plugin/>,就引不进来,去掉就可以引进来.需要研究下. <b ...

  10. 题解 CF1190B 【Tokitsukaze, CSL and Stone Game】

    思路: 首先题目告诉我们,一次只能删去一个石子.当然有翻译时会注意,但是看英文题时总是容易忽略.. 先排序. 然后,你会发现,有些情况是一开始就输的,具体情况如下: 有两个 两个相等非零数.(a[x] ...