unicode的环境下,写中文到文件,会出现乱码。
解决方法下面两个函数。
EncodeToUTF8 写入的时候调用
UTF8ToEncode 读取的时候调用
MultiByteToWideChar WideCharToMultiByte 实现原理就是这两个函数。 不知到哪位仁兄写的。
char* EncodeToUTF8(const char* mbcsStr)
{
wchar_t* wideStr;
char* utf8Str;
int charLen;
charLen = MultiByteToWideChar(CP_UTF8, 0, mbcsStr, -1, NULL, 0);
wideStr = (wchar_t*) malloc(sizeof(wchar_t)*charLen);
MultiByteToWideChar(CP_ACP, 0, mbcsStr, -1, wideStr, charLen);
charLen = WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, NULL, 0, NULL, NULL);
utf8Str = (char*) malloc(charLen);
WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, utf8Str, charLen, NULL, NULL);
free(wideStr);
return utf8Str;
}
char* UTF8ToEncode(const char* mbcsStr)
{
wchar_t* wideStr;
char* unicodeStr;
int charLen;
charLen = MultiByteToWideChar(CP_UTF8, 0, mbcsStr, -1, NULL, 0);
wideStr = (wchar_t*) malloc(sizeof(wchar_t)*charLen);
MultiByteToWideChar(CP_UTF8, 0, mbcsStr, -1, wideStr, charLen);
charLen =WideCharToMultiByte(CP_ACP, 0, wideStr, -1, NULL, 0, NULL, NULL);
unicodeStr = (char*)malloc(charLen);
WideCharToMultiByte(CP_ACP, 0, wideStr, -1, unicodeStr, charLen, NULL, NULL);
free(wideStr);
return unicodeStr;
}
分享到:
相关推荐
UTF-8是一种变长的字符编码,它使用1到4个字节来表示一个Unicode字符,其中ASCII字符(0-127)只需要1个字节。UTF-16则通常使用2个字节,对于大部分的Unicode字符,但对超出基本多文种平面(BMP)的字符,如表情符号...
在本场景中,我们面对的问题是“MFC UTF-8文件批量转成GB2312 解决中文乱码问题”,这涉及到文件的读取、编码转换以及文件的写入操作。 首先,我们需要理解UTF-8和GB2312这两种编码的区别。UTF-8是一种变长的...
本篇文章将详细探讨 Unicode 和 UTF-8 编码之间的转换,并提供一个不依赖于任何第三方库(如 iconv、MFC 或 ATL)的纯 C++ 代码实现。 首先,我们来理解一下 Unicode 和 UTF-8 的基本概念。Unicode 是一种统一的...
#### 三、UTF-8转CString 接下来,我们看看如何将UTF-8编码的字符串转换为`CString`: ```cpp CString CNurseDialog::utf8ToMulti(CString &str_utf8) { CString str_multi; int len = MultiByteToWideChar(CP_...
- **UTF-8**:即“Unicode Transformation Format - 8 bits”,是一种可变长度的字符编码方式,用于表示Unicode字符集。UTF-8编码最大的优点在于兼容ASCII,并且对于英文等拉丁语系的文字占用较少空间,因此被广泛...
而UTF-8是一种可变长度的Unicode编码,能容纳世界上几乎所有的字符集。 GBK编码是中国大陆广泛使用的编码标准,它基于GB2312,增加了许多额外的字符。UTF-8则是一种国际化的编码标准,它是Unicode的一种实现方式,...
本文将深入探讨C语言中UTF8、ANSI和Unicode字符集之间的转换方法,以及如何在MFC(Microsoft Foundation Classes)项目中集成这些转换代码。 首先,我们要了解UTF8、ANSI和Unicode的概念。UTF8是一种变长的Unicode...
UTF-8是一种广泛使用的Unicode编码,能够表示Unicode字符集中的所有字符。在Windows系统中,标准的文本文件读取操作可能会默认采用ANSI编码,这可能导致在处理非ASCII字符时出现问题。因此,我们需要明确指定使用UTF...
UTF-8是一种广泛使用的Unicode字符编码,它可以表示所有Unicode字符集中的字符。在VC++环境中,使用MFC(Microsoft Foundation Classes)库进行开发时,我们有时需要将字符串转换为UTF-8格式,以便在不同系统和平台...
1. **UTF-8转Unicode**:在给定的代码段中,提供了一个`UTF8ToUnicode`函数,用于将UTF-8编码的字符串转换为Unicode编码的`CString`对象。这个函数首先通过`MultiByteToWideChar`函数获取转换后的Unicode字符串所需...
UTF-8(Unicode Transformation Format - 8 bit)是一种变长的Unicode编码方式,它可以表示Unicode字符集中所有的字符。UTF-8的特点是对于ASCII字符,它与ASCII编码完全一致,而对于非ASCII字符,如汉字,它使用2到4...
这意味着当读取文件时,`CStdioFileEx`能够自动检测文件的字符集,无论是ASCII、UTF-8还是其他UNICODE编码,都能正确处理。这对于处理全球化软件和跨平台项目尤其重要,因为它确保了数据的一致性和准确性。 在`...
### Win32环境下UTF-8转GB2312的方法 #### 方法一:使用MFC类库 在Windows环境下,Microsoft Foundation Classes (MFC) 提供了一套强大的API来处理字符串编码转换。以下代码示例展示了如何使用MFC的`...
3. **UTF-8编码**:是一种变长的Unicode编码,可以表示Unicode标准中的所有字符。UTF-8的最大优点是与ASCII兼容,且在网络传输中占据空间较小,因此被广泛应用于互联网。 4. **批量转换**:此程序的功能亮点在于...
UNICODE是一种广泛使用的字符编码标准,它支持世界上几乎所有的字符集,包括ASCII、GB2312、GBK以及UTF-8等。在UNICODE环境下读取TXT文件,主要是为了正确解析和处理这些多语言或特殊字符。 MFC提供了一些基本的...
1. **UTF-8转中文(ANSI/MBCS)**: 这通常涉及到`MultiByteToWideChar`和`WideCharToMultiByte`这两个Windows API函数。`MultiByteToWideChar`将多字节字符串(如UTF-8)转换为宽字符字符串(UTF-16,Windows内部...
UTF-8 的优点在于它可以表示Unicode中的任何字符,且对于ASCII字符,UTF-8编码与ASCII相同,这使得它与许多现有的ASCII兼容系统兼容良好。此外,UTF-8的字节顺序是固定的,这使得在网络传输和存储时更为方便。 ...
本项目"Unicode MBCS字符转换程序.rar"专注于解决字符编码的转换问题,包括Unicode16le、Unicode16be、utf-8以及MBCS(多字节字符集)之间的相互转换。下面我们将深入探讨这些编码方式及其转换的原理与实践。 首先...
总结来说,"unicode-CFile.rar_CFILE utf8_CFile Unicode_CFile unicode TXT_un"这一主题涵盖了使用CFile类处理UTF-8编码的Unicode配置文件的关键点。理解和掌握这些知识对于进行跨平台、多语言的软件开发至关重要,...
文本字符串编码在 Text、ANSI、Unicode、Unicode Big Endian、UTF-8、 UTF-7 之间的互相转换,转换结果使用十六进制表示。 ******* STR ***************** * 运行环境 * 本软件在 Windows 98、Windows 2000...