文档章节

how to convert wstring to string

N3verL4nd
 N3verL4nd
发布于 2017/03/25 10:39
字数 318
阅读 4
收藏 0

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <locale>
#include <codecvt>
#include <fstream>
#include <sstream>
#include <afxwin.h>
using namespace std;


int main()
{
	setlocale(LC_CTYPE, "chs");
	string str;
	wstring wstr = L"123呵呵呵abc";
	char cstr[100] = {0};
	sprintf(cstr, "%S", wstr.c_str());
	str = cstr;
	cout << str << endl;
}

写入文件

#include <iostream>
#include <string>
#include <locale>
#include <codecvt>
#include <fstream>

int main(int argc, char *argv[])
{
   std::wstring str = L"123,我是谁?我爱钓鱼岛!";

   std::wstring_convert<std::codecvt_utf8<wchar_t>> conv;

   std::string narrowStr = conv.to_bytes(str);
   {
      std::ofstream ofs ("c:\\test.txt");
      ofs << narrowStr;
   }

   std::wstring wideStr = conv.from_bytes(narrowStr);
   {
      std::locale::global(std::locale("Chinese-simplified"));
      std::wofstream ofs (L"c:\\testW.txt");
      ofs << wideStr;
   }
}

UTF8文件读取

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <locale>
#include <codecvt>
#include <fstream>
#include <sstream>
#include <afxwin.h>
using namespace std;


int main()
{
	auto LocUtf8 = locale(locale(""),new codecvt_utf8<wchar_t>);
	wifstream wfin("test.txt");
	wfin.imbue(LocUtf8);
	wstring wstr;
	while (getline(wfin, wstr))
	{
		wcout.imbue(locale(""));
		wcout << wstr << endl;
	}
	wfin.close();
}

假如我们取到 的数据是这样的:

{"ret":1,"start":"58.57.64.0","end":"58.57.95.255","country":"\u4e2d\u56fd","province":"\u5c71\u4e1c","city":"\u6f4d\u574a","district":"","isp":"\u7535\u4fe1","type":"","desc":""}

http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=58.57.91.184

那么我们改怎么样进行转化呢?

zhaoshizhong1老师的方法:

#include <cstdio>
#include <locale>
#include <iostream>
using namespace std;

#define MAXL 100
char u[]="\\u4e2d\\u56fd", *p;
wchar_t us[MAXL];
char str[MAXL];
int i;
int main()
{
	setlocale(LC_ALL, "chs");
	//_wsetlocale(LC_ALL, L"chs");
	//std::locale loc = (std::locale("Chinese-simplified"));
	i = 0;
	p = u;
	while (true)
	{
		if (1 != sscanf(p, "\\u%4hx", &us[i])) break;
		i++;
		if (i >= MAXL - 1) break;
		p += 6;
	}
	us[i] = 0;
	//wcout.imbue(loc);
	sprintf(str, "%S", us);
	//wcout << us << endl;
	cout << str << endl;
	return 0;
}
//u:[\u5c71\u4e1c]
//us:[山东]
//




© 著作权归作者所有

N3verL4nd
粉丝 1
博文 379
码字总数 481243
作品 0
朝阳
私信 提问
几种C++ std::string和std::wstring相互转换的转换方法

第一种方法:调用WideCharToMultiByte()和MultiByteToWideChar(),代码如下(关于详细的解释,可以参考《windows核心编程》): #include #include using namespace std; //Converting a WC...

wwl33695
2015/04/21
0
0
几种C++ std::string和std::wstring相互转换的转换方法

第一种方法:调用WideCharToMultiByte()和MultiByteToWideChar(),代码如下(关于详细的解释,可以参考《windows核心编程》): #include #include using namespace std; //Converting a WC...

wwl33695
2018/06/26
0
0
string和wstring相互转换

//第一种方法:调用WideCharToMultiByte()和MultiByteToWideChar(),代码如下(关于详细的解释,可以参考《windows核心编程》): #include #include using namespace std; //Converting a ...

berryz2007
2010/12/12
0
0
basic_string, string, wstring

string只是basicstring的宏定义,是一种特化。 我们使用vector要指定类型vector<int>,但是string不需要。因为已经指定了类型。 basicstring才是一个STL中的sequence container, std::string...

曾劲松
2016/04/12
24
0
由VC2010与VC2017数据结构差异造成的程序错误

内容:VC2010和VC2017的标准库中,string(或wstring)的数据结构和操作有所不同,所以在将这两种数据作为参数在两个系统产生的函数中传递时会出现乱码(string和wstring在2017下必须是引用传...

小船1968
2018/10/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
7
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
4
0
mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
昨天
10
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
昨天
9
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部