UTF8在windows控制台乱码问题

简介: UTF8在windows控制台乱码问题
#include <iostream>
#include <codecvt>
std::string convertToUtf8(const std::wstring& str) {
  std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> converter;
  return converter.to_bytes(str);
}
std::wstring convertToUtf16(const std::string& str) {
  std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> converter;
  return converter.from_bytes(str);
}
int main(int argc, char** argv)
{
  std::wstring wstr = L"我是中国人";
  std::string str = convertToUtf8(wstr);
  std::cout << str << std::endl;
  getchar();
  return 0;
}

仅仅这么处理会导致乱码,因为控制台默认是ASCI编码,显示UTF8的编码会乱码。此时需要把UTF8转ASCI,然后在控制台显示

增加转码函数

#include <iostream>
#include <codecvt>
#include <Windows.h>
std::string convertToUtf8(const std::wstring& str) {
  std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> converter;
  return converter.to_bytes(str);
}
std::wstring convertToUtf16(const std::string& str) {
  std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> converter;
  return converter.from_bytes(str);
}
std::wstring Utf8ToUnicode(const std::string& strUTF8)
{
  int len = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, NULL, 0);
  if (len == 0)
  {
    return L"";
  }
  wchar_t *pRes = new wchar_t[len];
  if (pRes == NULL)
  {
    return L"";
  }
  MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, pRes, len);
  pRes[len - 1] = L'\0';
  std::wstring result = pRes;
  delete[] pRes;
  return result;
}
std::string Utf8ToAnsi(const std::string& utf8)
{
  std::wstring wstrTemp = Utf8ToUnicode(utf8);
  LPCWCH ptr = wstrTemp.c_str();
  int size = WideCharToMultiByte(CP_ACP, 0, ptr, -1, NULL, 0, NULL, NULL);
  std::string strRet(size - 1, 0);
  int len = WideCharToMultiByte(CP_ACP, 0, ptr, -1, (LPSTR)strRet.c_str(), size, NULL, NULL);
  return strRet;
}
int main(int argc, char** argv)
{
  std::wstring wstr = L"我是中国人";
  std::string str = Utf8ToAnsi(convertToUtf8(wstr));
  std::cout << str << std::endl;
  getchar();
  return 0;
}

相关文章
|
7月前
|
Java 开发工具 Windows
Windows环境下面启动jar包,输出的日志出现乱码的解决办法
Windows环境下面启动jar包,输出的日志出现乱码的解决办法
|
7月前
|
IDE 开发工具 Python
解决pycharm运行项目时控制台乱码
解决pycharm运行项目时控制台乱码
133 0
|
3月前
|
Windows
windows 乱码之 gbk 与 cp936|4-3
windows 乱码之 gbk 与 cp936|4-3
|
2月前
|
IDE 开发工具
idea控制台出现乱码的解决方案
本文提供了解决IntelliJ IDEA控制台乱码问题的多种方法,包括设置项目编码、控制台编码、修改启动配置、修改IDE编码、检查系统环境设置以及更新IDE版本。
512 0
关于idea控制台乱码问题的解决办法
关于idea控制台乱码问题的解决办法
|
6月前
|
应用服务中间件 Windows
tomcat控制台打印乱码解决
tomcat控制台打印乱码解决
97 10
|
6月前
|
NoSQL 数据管理 关系型数据库
数据管理DMS操作报错合集之控制台查看Redis时出现乱码是什么导致的
数据管理DMS(Data Management Service)是阿里云提供的数据库管理和运维服务,它支持多种数据库类型,包括RDS、PolarDB、MongoDB等。在使用DMS进行数据库操作时,可能会遇到各种报错情况。以下是一些常见的DMS操作报错及其可能的原因与解决措施的合集。
103 2
|
6月前
|
Windows
windows系统bat批处理 打开乱码
windows系统bat批处理 打开乱码
45 4
|
Java Maven
idea里maven执行时控制台乱码
idea里maven执行时控制台乱码
88 2
|
7月前
|
编译器 Python
【python】控制台中文输出乱码解决方案
【python】控制台中文输出乱码解决方案
210 0
下一篇
DataWorks