`
暴风雪
  • 浏览: 390339 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

c++ string、UTF8互相转换方法

    博客分类:
  • C艹
 
阅读更多

c++ string、UTF8相互转换方法
 普通sting类型 转UTF-8编码格式字符串

std::string ofDewarServer::string_To_UTF8(const std::string & str)
{
int nwLen = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, 0);

wchar_t * pwBuf = new wchar_t[nwLen + 1];//一定要加1,不然会出现尾巴
ZeroMemory(pwBuf, nwLen * 2 + 2);

::MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), pwBuf, nwLen);

int nLen = ::WideCharToMultiByte(CP_UTF8, 0, pwBuf, -1, NULL, NULL, NULL, NULL);

char * pBuf = new char[nLen + 1];
ZeroMemory(pBuf, nLen + 1);

::WideCharToMultiByte(CP_UTF8, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL);

std::string retStr(pBuf);

delete []pwBuf;
delete []pBuf;

pwBuf = NULL;
pBuf = NULL;

return retStr;
}
//////////////////////////////////////////////////////////////////////////

 

UTF-8编码格式字符串  转普通sting类型

 

std::string ofDewarServer::UTF8_To_string(const std::string & str)
{
int nwLen = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, NULL, 0);

wchar_t * pwBuf = new wchar_t[nwLen + 1];//一定要加1,不然会出现尾巴
memset(pwBuf, 0, nwLen * 2 + 2);

MultiByteToWideChar(CP_UTF8, 0, str.c_str(), str.length(), pwBuf, nwLen);

int nLen = WideCharToMultiByte(CP_ACP, 0, pwBuf, -1, NULL, NULL, NULL, NULL);

char * pBuf = new char[nLen + 1];
memset(pBuf, 0, nLen + 1);

WideCharToMultiByte(CP_ACP, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL);

std::string retStr = pBuf;

delete []pBuf;
delete []pwBuf;

pBuf = NULL;
pwBuf = NULL;

return retStr;
}
//////////////////////////////////////////////////////////////////////////
分享到:
评论

相关推荐

    C/C++语言UTF16和UTF32互相转换生成文件

    本篇文章将深入探讨如何使用C/C++进行UTF-16和UTF-32之间的转换,并讨论在读取和写入文件时的相关技术。 首先,让我们理解UTF-16和UTF-32的基本概念。UTF-16使用16位(2个字节)的单位来编码大多数常见的Unicode...

    VC ASCII,UNICODE,UTF8字符串互相转换的C++代码

    而在ASCII和UTF-8之间转换,可以使用`std::wstring_convert`和`std::codecvt_utf8`,但需要注意,这些在C++17后已被标记为过时,推荐使用`std::string_view`和第三方库如iconv或ICU。 以下是一些基本的转换示例: ...

    java通过jni和c++代码之间实现互相调用

    对于 `String`,使用 `GetStringUTFChars` 获取字符串的 UTF-8 编码。对于 `int` 类型,可以直接通过 `GetIntField` 或 `SetIntField` 进行读写。 5. **编译和链接**:编译 C++ 代码,并链接到 JVM 库(通常是 `...

    VC之CString,wchar_t,int,string,char*之间的转换

    `CString`、`wchar_t`、`int`、`string`和`char*`都是编程中常用的字符串和数值类型,它们之间互相转换有助于在不同场景下灵活地处理数据。本篇文章将详细介绍这些类型之间的转换方法。 首先,`CString`是Microsoft...

    网络聊天chat c++

    在网络通信中,一般使用ASCII或UTF-8编码。在C++中,可以使用`std::string`来处理字符串,对于更复杂的数据结构,可能需要进行序列化和反序列化。例如,JSON是一种常见的数据交换格式,可以使用如nlohmann/json这样...

    androidjni编程,java和c层的互相通信传递数据

    - `字符串处理`:Java的`String`在JNI中表示为`jstring`,可以使用`GetStringUTFChars()`获取其UTF-8编码的字符数组。 4. **性能考虑** - 跨语言调用开销:虽然JNI提供了高效的本地代码执行,但Java到C/C++的调用...

    android jni 中文字符传递demo

    通常,这会涉及到Java的`String.getBytes()`方法(使用特定的编码,如UTF-8)和C/C++中的`JNIEnv`接口来处理字节数组。 在Android开发环境中,Eclipse曾是广泛使用的IDE,尽管现在更多的是使用Android Studio,但这...

    04 字符串(2).zip

    8. **转换与格式化**:字符串和数值之间可以互相转换。Python中`int(s)`和`str(n)`,C++中`std::stoi`和`std::to_string`。格式化字符串,Python的`f-string`或`format`,C++的`std::ostringstream`或`printf`家族。...

    QString和char以及string之间的赋值详解

    它们之间的互相转换和赋值操作是开发者经常遇到的问题。以下是对这些操作的详细讲解: 一、`QString`赋值给`char*` 在将`QString`对象赋值给`char*`时,通常需要将其转换为`Latin1`编码,因为`char*`通常用于存储...

    geojson-geometry-shp格式相互转化总结

    sds.setCharset(Charset.forName("UTF-8")); String typeName = sds.getTypeNames()[0]; // 输出gis.osm_buildings_a_free_1 // 更改表名以避免特殊字符 typeName = typeName.replace(".", "_e"); // 创建...

    hex2ascii_Hex2Char_十六进制转字符串_

    描述中提到的“在网络通信中经常用到16进制和ASCII码字符数组互相转换的功能”,这是因为网络传输的数据通常以二进制形式存在,而人类更易于理解ASCII字符。因此,当需要查看或解析网络数据时,会将二进制数据转换为...

    经典的问题

    String类为什么复写Object类的equals方法** - 为了实现字符串内容的比较,而不是比较引用。 #### 七、IO **1. 字节流复制文件** - 使用`FileInputStream`和`FileOutputStream`结合缓冲区进行文件复制。 **2. ...

    asn1编码问题详解

    - **UNIVERSAL 12**:UTF8字符串类型。 - **UNIVERSAL 13**:相对对象标识符类型。 - **UNIVERSAL 16**:序列和类型序列。 - **UNIVERSAL 17**:集合和类型的集合。 - **UNIVERSAL 23-24**:时间类型。 - **...

    理学Java修订PPT学习教案.pptx

    `Boolean`类型用于逻辑运算,只有两个值:`false`和`true`,它们不能与整型值互相转换。 在变量声明和使用上,Java要求每个变量都有明确的数据类型,例如`int days`和`double salary`。声明变量时,变量名必须以...

    2021-2022计算机二级等级考试试题及答案No.1099.docx

    - **详细解释**:在Java中,每个可独立运行的应用程序都必须有一个且仅有一个包含`public static void main(String[] args)`方法的类。这个方法是Java虚拟机调用来启动程序的唯一入口。因此,包含`main`方法的类就是...

Global site tag (gtag.js) - Google Analytics