zoukankan      html  css  js  c++  java
  • how to convert wstring to string

    #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":"u4e2du56fd","province":"u5c71u4e1c","city":"u6f4du574a","district":"","isp":"u7535u4fe1","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:[u5c71u4e1c]
    //us:[山东]
    //
    




    Keep it simple!
    作者:N3verL4nd
    知识共享,欢迎转载。
  • 相关阅读:
    HDU 5528 Count a * b 欧拉函数
    HDU 5534 Partial Tree 完全背包
    HDU 5536 Chip Factory Trie
    HDU 5510 Bazinga KMP
    HDU 4821 String 字符串哈希
    HDU 4814 Golden Radio Base 模拟
    LA 6538 Dinner Coming Soon DP
    HDU 4781 Assignment For Princess 构造
    LA 7056 Colorful Toy Polya定理
    LA 6540 Fibonacci Tree
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5834851.html
Copyright © 2011-2022 走看看