c++ 读取 utf-8 文件到 string
#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的更多相关文章
- InputStream读取文件到string后OutputStream到文件,按String和Bytes拷贝
http://www.iteye.com/problems/72150 写了一段代码 大体是 InputStream读取文件到string后OutputStream到文件 遇到的问题为TXT文件大小格 ...
- 读取本地json文件,转出为指定格式json 使用Base64进行string的加密和解密
读取本地json文件,转出为指定格式json 引用添加Json.Net 引用命名空间 using Newtonsoft.Json //读取自定目录下的json文件StreamReader sr = ...
- .NET Core的文件系统[1]:读取并监控文件的变化
ASP.NET Core 具有很多针对文件读取的应用.比如我们倾向于采用JSON文件来定义配置,所以应用就会涉及针对配置文件读取.如果用户发送一个针对物理文件的HTTP请求,应用会根据指定的路径读取目 ...
- 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 ...
- 编写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 ...
- POI读取/写入Excel文件
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io ...
- iOS案例:读取指定txt文件,并把文件中的内容输出出来
用到的是NSString中的initWithContentsOfFile: encoding方法 // // main.m // 读取指定文件并输出内容 // // Created by Apple ...
- 使用HttpWebRequest以及HttpWebResponse读取Http远程文件
主页>杂项技术>.NET(C#)> 使用HttpWebRequest以及HttpWebResponse读取Http远程文件 jackyhwei 发布于 2010-08-15 21: ...
- JCIFS读取远程服务器文件过慢的解决方法
JCIFS读取远程服务器文件过慢的解决方法 发表于3年前(2013-07-12 11:23) 阅读(1174) | 评论(0) // 我要收藏"; var favor_del = &qu ...
- JNI读取assets资源文件
源自:http://www.rosoo.net/a/201112/15459.html assets目录底下的文件会被打包到一个apk文件里,这些资源在安装时他们并没被解压,使用时是直接从apk中读取 ...
随机推荐
- linux下利用tcpdump抓包工具排查nginx获取客户端真实IP实例
一.nginx后端负载服务器的API在获取客户端IP时始终只能获取nginx的代理服务器IP,排查nginx配置如下 upstream sms-resp { server ; server ; } s ...
- 批量修改zencart型号:品牌名称+型号格式
批量修改zencart型号:品牌名称+型号格式 将下面代码保存为zc_change_model.php,上传到网站根目录运行即可,操作前先备份数据库 <?php /*** 批量修改zencart ...
- Codeforces 987 K预处理BFS 3n,7n+1随机结论题/不动点逆序对 X&Y=0连边DFS求连通块数目
A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_bac ...
- POSTGRESQL 批量权限 管理方法
原博地址 https://yq.aliyun.com/articles/41512?spm=a2c4e.11153940.0.0.20b7640fcDiFQA 关于PostgreSQL的逻辑架构和权限 ...
- MySQL知识总结(缓存)
1.缓存机制概念 缓存机制简单的说就是缓存sql文本及查询结果,如果运行相同的sql,服务器直接从缓存中取到结果,而不需要再去解析和执行sql.如果表更改了,那么使用这个表的所有缓冲查询将不再有效,查 ...
- CSS中的 vh/vw
vh 相对于当前窗口的大小,我用electron-vue来开发一个桌面应该,就用到这个,很方便,百分比需要外面有一个固定的高度,依赖父元素
- 利用poi操作word文档
关键字:POI JAVA 批注 总页数 总字符数 一:认识POI Apache POI是一个开源的利用Java读写Excel.WORD等微软OLE2组件文档的项目.最新的3.5版本有很多改进,加入了对 ...
- vue-router的hash模式和history模式,
hash模式背后的原理是onhashchange事件,可以在window对象上监听这个事件: window.onhashchange = function(event){ console.log(ev ...
- [业务监控系统]MEDIVH架构设计和接入方案
Medivh监控系统- 系统介绍 本系统旨在提供业务监控实时数据和历史数据以及报表.阈值报警.同比增长分析等一体化的历史业务数据解决方案. 技术选型 sdk部门有C#版和java版,api和websi ...
- WTL拖拽文件
1.对话框属性中把:Accept Files设置为TRUE,或者ModifyStyleEx(0, WS_EX_ACCEPTFILES); 2.在对话框中添加一个ListBox控件,并关联成员变量:m_ ...