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中读取 ...
随机推荐
- zabbix修改默认字体
在zabbixweb界面里有时候显示界面为框框 所以修改默认字体 现在windows里 随便找个字体: win+R 搜fonts 然后随便复制了一个字体,传到zabbix服务器里 cp calib ...
- redis数据库到mysql或mongodb数据库
# -*- coding:utf-8 -*-# item_mongodb.py import redis import pymongo import json def main(): redis_co ...
- 火车采集用到的access查询命令小结
#For zencart #图片网址路径替换 UPDATE Content SET v_products_image=replace(v_products_image, '<img src=&q ...
- iOS控件圆角与半圆角
开发过程中难免用到圆角以及恶心的半圆角,看代码 半圆角:这是把左边的两个角切成了圆角 UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoun ...
- Java并发编程实战 第11章 性能与可伸缩性
关于性能 性能的衡量标准有很多,如: 服务时间,等待时间用来衡量程序的"运行速度""多快". 吞吐量,生产量用于衡量程序的"处理能力",能够 ...
- spring AspectJ的Execution表达式(转载)
原文:http://blog.csdn.net/peng658890/article/details/7223046 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需 ...
- jpa 中的save()方法
@RequestMapping(value = "", method = RequestMethod.POST) public String postAccount(@Reques ...
- Luogu P2619 [国家集训队2]Tree I 凸优化,wqs二分
新学的科技.设\(f(x)\)为选\(x\)条白色边的时候的最小生成树权值和,那么可以猜到它应该是一个下凸函数的形式. 如图,图中\(x\)坐标表示选的白色边条数,\(y\)坐标表示获得的权值,那么我 ...
- Python修炼之路-函数
Python编程之函数 程序的三种方式 面向对象:类------->class 面向过程:过程------>def 函数式编程:函数------>def 定义函数 函数:逻辑结构化与 ...
- 【30分钟学完】canvas动画|游戏基础(extra1-1):美图我也行
前言 本文是接续系列教程的extra1,主要是介绍颜色系统在canvas中的应用. 本来是与extra1一起成文的,因为segmentfault莫名其妙的字数限制bug只能分割放送了. canvas操 ...