文档章节

how to convert wstring to string

N3verL4nd
 N3verL4nd
发布于 2017/03/25 10:20
字数 318
阅读 2
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud 笔记之Spring cloud config client

观察者模式它的数据的变化是被动的。 观察者模式在java中的实现: package com.hxq.springcloud.springcloudconfigclient;import org.springframework.context.ApplicationListener;i...

xiaoxiao_go
今天
4
0
CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
今天
4
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
7
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
7
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部