字符编码转换类(支持多国语言)

微信小程序开发中的多国语言支持和国际化 随着微信用户的日益增长,尤其是海外用户的增加,如何让小程序不仅仅在国内市场站稳脚跟,更能走向世界,成为了每一个开发者都必须面对的问题。想象一下,如果你的小程序能够根据用户的地理位置自动切换语言设置,或者允许用户手动选择他们习惯的语言,这将极大地提升用户的体验感。理想情况下,我们应该邀请来自不同国家的测试人员参与到产品的测试过程中,因为他们能从各自的文化背景出发,给予最真实的反馈。你可以把这里当作自己的家,无论是工作之余的小憩,还是寻找灵感的驿站,我都希望你能在这里找到属于你的那份快乐和满足。 阅读详情

头文件StrConvertor.h

/*
*	字符编码转换库,支持多国语言。
*/
#pragma once
#include <string>

class CStrConvertor
{
public:
	CStrConvertor();
	~CStrConvertor();

	std::string UTF8toANSI(const char* lpUTF8);
	std::string UTF8toANSI(const std::string& lpUTF8);
	std::wstring UTF8toUNICODE(const char* lpUTF8);
	std::wstring UTF8toUNICODE(const std::string& lpUTF8);
	std::string ANSItoUTF8(const char* lpANSI);
	std::string ANSItoUTF8(const std::string& lpANSI);
	std::wstring ANSItoUNICODE(const char* lpANSI);
	std::wstring ANSItoUNICODE(const std::string& lpANSI);
	std::string UNICODEtoANSI(const wchar_t* lpUNICODE);
	std::string UNICODEtoANSI(const std::wstring& lpUNICODE);
	std::string UNICODEtoUTF8(const wchar_t* lpUNICODE);
	std::string UNICODEtoUTF8(const std::wstring& lpUNICODE);
};

源文件StrConvertor.cpp

#include "StrConvertor.h"
#include <windows.h>

CStrConvertor::CStrConvertor()
{
}


CStrConvertor::~CStrConvertor()
{
}


std::wstring CStrConvertor::ANSItoUNICODE(const char* lpANSI)
{
	std::wstring szResult = L"";
	int len = strlen(lpANSI);
	int unicode_len = 0;
	unicode_len = MultiByteToWideChar(GetACP(), 0, lpANSI, -1, NULL, 0);

	wchar_t* pUnicode = new wchar_t[unicode_len + 1];
	memset(pUnicode, NULL, (unicode_len + 1)*sizeof(wchar_t));
	MultiByteToWideChar(GetACP(), 0, lpANSI, -1, pUnicode, unicode_len);

	szResult = pUnicode;
	delete[] pUnicode;

	return szResult;
}

std::wstring CStrConvertor::ANSItoUNICODE(const std::string& lpANSI)
{
	return ANSItoUNICODE(lpANSI.c_str());
}

std::string CStrConvertor::UNICODEtoUTF8(const wchar_t* lpUNICODE)
{
	std::string szResult = "";
	int len = wcslen(lpUNICODE);
	int utf8_len = 0;
	utf8_len = WideCharToMultiByte(CP_UTF8, 0, lpUNICODE, -1, NULL, 0, NULL, NULL);

	char* pUTF8 = new char[utf8_len + 1];
	memset(pUTF8, NULL, utf8_len + 1);
	WideCharToMultiByte(CP_UTF8, 0, lpUNICODE, -1, pUTF8, utf8_len, NULL, NULL);

	szResult = pUTF8;
	delete[] pUTF8;

	return szResult;
}

std::string CStrConvertor::UNICODEtoUTF8(const std::wstring& lpUNICODE)
{
	return UNICODEtoUTF8((wchar_t*)lpUNICODE.c_str());
}

std::string CStrConvertor::ANSItoUTF8(const char* lpANSI)
{
	return UNICODEtoUTF8(ANSItoUNICODE(lpANSI));
}

std::string CStrConvertor::ANSItoUTF8(const std::string& lpANSI)
{
	return UNICODEtoUTF8(ANSItoUNICODE(lpANSI));
}

std::wstring CStrConvertor::UTF8toUNICODE(const char* lpUTF8)
{
	std::wstring szResult = L"";
	int len = strlen(lpUTF8);
	int unicode_len = 0;
	unicode_len = MultiByteToWideChar(CP_UTF8, 0, lpUTF8, -1, NULL, 0);

	wchar_t* pUnicode = new wchar_t[unicode_len + 1];
	memset(pUnicode, NULL, (unicode_len + 1)*sizeof(wchar_t));
	MultiByteToWideChar(CP_UTF8, 0, lpUTF8, -1, pUnicode, unicode_len);

	szResult = pUnicode;
	delete[] pUnicode;

	return szResult;
}

std::wstring CStrConvertor::UTF8toUNICODE(const std::string& lpUTF8)
{
	return UTF8toUNICODE(lpUTF8.c_str());
}

std::string CStrConvertor::UNICODEtoANSI(const wchar_t* lpUNICODE)
{
	std::string szResult = "";
	int len = wcslen(lpUNICODE);
	int ansi_len = 0;
	ansi_len = WideCharToMultiByte(GetACP(), 0, lpUNICODE, -1, NULL, 0, NULL, NULL);

	char* pAnsi = new char[ansi_len + 1];
	memset(pAnsi, NULL, ansi_len + 1);
	WideCharToMultiByte(GetACP(), 0, lpUNICODE, -1, pAnsi, ansi_len, NULL, NULL);

	szResult = pAnsi;
	delete[] pAnsi;

	return szResult;
}

std::string CStrConvertor::UNICODEtoANSI(const std::wstring& lpUNICODE)
{
	return UNICODEtoANSI(lpUNICODE.c_str());
}

std::string CStrConvertor::UTF8toANSI(const char* lpUTF8)
{
	return UNICODEtoANSI(UTF8toUNICODE(lpUTF8));
}

std::string CStrConvertor::UTF8toANSI(const std::string& lpUTF8)
{
	return UNICODEtoANSI(UTF8toUNICODE(lpUTF8));
}


VC++中ANSI、UNICODE与UTF-8字符编码之间的转换(附源码) ANSI、UNICODE与UTF-8字符编码之间的转换 阅读详情

相关推荐

掌握各国语言编码:编码知识全面解析

本文还有配套的精品资源,点击获取 简介:编码是将字符转换为计算机可识别的二进制形式的过程,是计算机处理文本的基础。本文深入探讨了包括ASCII、Windows系列编码、GB2312、GBK、BIG5在内的多种编码系统,并分析了它们的应用领域和重要性。了解这些编码表对于开发者来说至关重要,有助于正确处理文本数据,并避免数据交换时出现乱码问题。此外,文章也介绍了Unicode标...

weixin_42502040的博客 2720

各国语言编码表

37 IBM EBCDIC (美国-加拿大) IBM037 437 OEM 美国 IBM437 500 IBM EBCDIC (国际) IBM500 708 阿拉伯字符(ASMO-708) ASMO-708 720 阿拉伯字符(DOS) DOS-720 737 希腊字符(DOS) ibm737 775 波罗的...

huningjun的专栏 1万+

多国语言点阵字库设计工具教程与案例分析

点阵字库技术是一种将文字以点阵形式存储的方法。每个点代表了一个最小的显示单元,多个点组合起来形成文字的轮廓。这种技术最早应用于低分辨率的显示设备,如电子显示屏和打印机。由于其占用空间小、渲染速度快的特点,在嵌入式系统和特定应用场景中仍有着广泛的应用。在点阵字库技术中,用户自定义点阵大小和风格是吸引用户的重要功能之一。点阵字库的灵活性允许用户根据不同需求调整字库的视觉表现形式和性能。点阵风格决定了字体的整体外观和情感表达。常见的风格包括:- 粗体(Bold)- 斜体(Italic)

weixin_32480007的博客 407

字符编码及转换

字符编码(Character encoding)也称字集码,是把字符集中的字符,编码为指定集合中的某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储或者通信网络的传递。常见的例子是将拉丁字母表编码成摩斯电码和ASCII,比如ASCII编码是将字母、数字和其它符号进行编号,并用7比特的二进制来表示这个整数。

chen_jianjian的专栏 7308

深入理解与实现字符编码转换技术

htmltable {th, td {th {pre {简介:字符编码是文本数据处理的核心,确保数据在不同系统间正确传输。文章详细讨论了ASCII、Unicode、UTF-8、UTF-7、GB2312和Big5等编码格式,并探讨了它们之间的转换技术。介绍了工具StrParser 1.2用于转换和展示不同编码。掌握这些编码及其转换对于编写兼容软件、构建多语言网站和数据迁移至关重要。

weixin_28746457的博客 1088

多国语言Unicode转换 中英文编码查询器

多国语言Unicode转换.exe 中英文编码查询器

Aya的学习笔记:C语言,字符编码格式与转换。详解 MultiByteToWideChar,WideCharToMultiByte,mbstowcs_s,wcstombs_s

MultiByteToWideChar()和WideCharToMultiByte() 都是Windows系统提供的API函数,不具有通用性。 头文件:windows.h 例: 有一个文本文件:01.txt 把文档内容按行存取到字符串中。 在控制台输出字符串。 根据上述要求需要用到函数 #include <stdio.h> int main() { FILE* fp = NUL...

qq_37415550的博客 4061

Unicode编码表_多国语言

Unicode编码表,包括中文、英文、日文、韩文、拉丁文等多种语言。Excel格式。

各种字符集

本文介绍了三种字符编码标准:ASCII、ANSI/GB系列和Unicode。ASCII是7位编码标准,包含128个英文字符和控制符号;ANSI扩展为双字节编码(0x80-0xFFFF),支持多语言。GB系列(GB2312/GBK)是中文编码标准,采用区位码转换机制,通过高位置1区分ASCII。Unicode为全球统一编码,采用码点标识(U+XXXX),其实现方式包括UTF-8(1-4字节变长)、UTF-16(2/4字节)和UTF-32(固定4字节)。U

voidddddddd的博客 1018

编程语言代码转换器!!

编程语言自动代码转换器 编程语言自动代码转换器!!!!!!!!!!!!!!!!!!!!!!!

语言代码转换及翻译工具_Convert.NET V7.6.5892 多国语言绿色免费版

Convert.NET一个多功能的语言代码转换及翻译工具

关于C++支持多国语言字符编码的问题

不同语言,不同编码之间的转换很容易造成乱码,经过一翻折腾,可以确定的是,在VC++中,ASCII用的是gb2312编码,这种方式和操作系统使用的字符编码相关。UNICODE用的是UTF-16LE编码,这种就是宽字符版的统一字符集,可以容纳世界上所有的语言。所以想要对多国语言进行过滤操作,UTF-8只可以转成wstring进行操作。     由于C++本身并不支持UTF-8编码,所以需要先

狐狸王的虚拟世界 1267

WslRegisterDistribution failed with error_ 0x8007019e、0x800701bc、0x80370102

Ubuntu 20.04.4 LTS 报错解决方案。分别涉及到三个错误:WslRegisterDistribution failed with error: 0x8007019e、WslRegisterDistribution failed with error: 0x800701bc和WslRegisterDistribution failed with error: 0x80370102

一起加油~ 5万+

EBCDIC 与 GBK 的字符编码及其转换

概览 有些用户在使用 AIX 时在字符编码方面遇到一些困惑,请看下面的场景: 1,用户用从 AIX 利用 FTP 客户端登录上 IBM i,切换到某个 Library/File,然后 get 其中的某个 Member 到本地机器,用文本编辑工具打开时发现是乱码,和自己在 IBM i 上看到的完全不一样; 2,用户在实现 AIX 平台与 z/OS 平台通信的 TCP/IP 应用程序中,会遇到传...

lylhelin的专栏 2638

告别手动!用Python+CATIA V5/V6自动生成三视图和标题栏(附完整代码)

本文详细介绍了如何利用Python和CATIA V5/V6实现工程图自动生成,包括三视图布局和标题栏填写。通过COM接口调用和智能算法,系统能自适应不同尺寸模型,大幅提升设计效率。附完整代码和部署方案,帮助团队实现从手动到自动化的转变。

weixin_42699679的博客 353

LabVIEW Modbus TCP通信避坑指南:解决连接中断、服务器异常与自动重连问题

本文详细解析了LabVIEW环境下Modbus TCP通信的常见问题,包括连接中断、服务器异常等,并提供了自动重连机制的实现方案。通过优化错误处理、超时参数和资源管理,帮助开发者构建更稳定的工业级Modbus TCP客户端,显著提升通信可靠性。

weixin_42525211的博客 424

字符编码

字符编码1.什么是字符编码?1.1字符编码发展史阶段一:一家独大阶段二:群雄割据阶段三:分久必合2.字符编码的应用1、unicode的作用2、乱码问题3.python解释器执行文件的三个阶段 1.什么是字符编码? 人类在与计算机交互时,用的都是人类能读懂的字符,如中文字符、英文字符、日文字符等, 而计算机只能识别二进制数,详解如下。 二进制数即是由0和1组成的数字。计算机是基于点工作的,电的特性就是高低电频,人类从逻辑层面 将高电频对应为数字1,低电频对应为数字0,这直接决定了计算机可以识别的是由0和1组成

weixin_50317663的博客 227

YOLOv11改进 | Conv篇 | DWRSeg扩张式残差助力小目标检测 (附创新修改后的C3k2DWRSeg)

本文内容给大家带来的DWRSeg中的DWR模块来改进YOLOv11中的C2f和Bottleneck模块,主要针对的是小目标检测,主要创新点可以总结如下:多尺度特征提取机制的深入研究和创新的DWR模块和SIR模块的提出这种方法使得网络能够更灵活地适应不同尺度的特征,从而更准确地识别和分割图像中的物体。DWRSeg的基本原理和框架,并且能够在你自己的网络结构中进行添加DWRSeg需要增加一定的计算量一个DWR模块大概增加0.4GFLOPsYOLOv11改进系列专栏——本专栏持续复习各种顶会内容——科研必备。

Snu77的博客 4185

EBCDIC 与 GBK 的字符编码及其转换(转)

概览 有些用户在使用 AIX 时在字符编码方面遇到一些困惑,请看下面的场景: 1,用户用从 AIX 利用 FTP 客户端登录上 IBM i,切换到某个 Library/File,然后 get 其中的某个 Member 到本地机器,用文本编辑工具打开时发现是乱码,和自己在 IBM i 上看到的完全不一样; 2,用户在实现 AIX 平台与 z/OS 平台通信的 TCP/IP 应用程序

msbls5的专栏 1万+

Android 14.0 SystemUI状态栏居中显示时间和修改时间显示样式

在14.0的系统rom定制化开发中,在systemui状态栏系统时间默认显示在左边和通知显示在一起,但是客户想修改显示位置,想显示在中间,所以就要修改SystemUI 的Clock.java 文件这个就是管理显示时间的,居中显示的话就得修改布局文件了

安卓兼职framework和app工程师的博客 978

18、公开可用的PPG数据库介绍

本文介绍了多个公开可用的PPG(光电容积描记)数据库,包括PPG-BP数据库、MIMIC II波形数据库、运动期间手腕PPG数据库以及指尖PPG与呼吸数据库等。这些数据库提供了丰富的生理信号数据,适用于动脉血压检测、呼吸频率估计、运动干扰去除以及基于PPG的生物特征识别等研究。每个数据库的数据来源、受试者信息、信号特点和下载方式均有详细介绍,并展示了如何利用这些数据库进行信号分析和算法评估。

salt的博客 388

字符编码与解码

字符编码与解码

Renweif的博客 617

从零到精通:BLDC电机驱动电路详解与设计思路

这套电机驱动电路从核心控制器到反馈采集模块,涉及了BLDC电机驱动的方方面面。每一个模块的设计和选择都需要综合考虑系统需求和实际使用环境。在实际应用中,很多细微的设计改进都会显著影响电机的运行性能。

weixin_43199439的博客 3100

菜单多国语言化遇到的问题

在对菜单进行改造,使其能够支持多国语言化的过程中,遇到了一个很奇怪的问题。在我们的win2000操作系统中,区域选项中默认地区选择英语,菜单选择日文或者中文,就会出现乱码。奇怪的是,无论是弹出窗口,还是其它按钮,都可以正常切换到日文或者中文,只有菜单是乱码。而我们对其实现的机制都是一模一样的。如果默认地区选择中文或者日文,不会出现任何问题。在经过多方面的调查,发现AWT菜单会出现这种情况,而Swi...

mmdev 125

22h2版本的win10安装Docker Desktop时页面空白

摘要:Windows10 22H2系统重装Docker时出现安装界面卡死问题,通过管理员CMD执行静默安装命令解决。命令指定了WSL-2后端及多个自定义数据存储路径(安装目录、Hyper-V数据、Windows容器数据、WSL数据),安装需等待几分钟。最终验证安装成功。

猿小白的博客 655

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 内核PspCidTable句柄表遍历获取隐藏进程
下一篇: Ubuntu下连接红米2无法找到设备解决方案
hacklaolang
博客等级 码龄19年 3粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值