ifstream打印汉字乱码问题 UTF-8转GB2312
来源:互联网 发布:内存条js 编辑:程序博客网 时间:2024/05/22 14:18
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <windows.h>#include <stdio.h>#include <tchar.h>#include <iostream>#include <fstream>using namespace std;WCHAR * UTF_8ToUnicode(char *pText, WCHAR &unicode){/*UTF-8是一种多字节编码的字符集,表示一个Unicode字符时,它可以是1个至多个字节,在表示上有规律:1字节:0xxxxxxx2字节:110xxxxx 10xxxxxx3字节:1110xxxx 10xxxxxx 10xxxxxx4字节:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx*/char *uchar = (char *)&unicode;uchar[1] = ((pText[0] & 0x0F) << 4) + ((pText[1] >> 2) & 0x0F);uchar[0] = ((pText[1] & 0x03) << 6) + (pText[2] & 0x3F);return &unicode;}char * UnicodeToGB2312(WCHAR uData, char buffer[2]){WideCharToMultiByte(CP_ACP, NULL, &uData, 1, buffer, sizeof(WCHAR), NULL, NULL);return buffer;}char * TranslateUTF8ToGB(char *str, size_t len){char * newCharBuffer = new char[len];int index = 0;int nCBIndex = 0;WCHAR wTemp = 0;char cTemp[2] = " ";while (index < len){if (str[index] == 0)break;else if (str[index] > 0) // 如果是GB2312的字符 {newCharBuffer[nCBIndex] = str[index]; //直接复制 index += 1; //源字符串偏移量1 nCBIndex += 1; //目标字符串偏移量1 }else //如果是UTF-8的字符 {UTF_8ToUnicode(str + index, wTemp); //先把UTF-8转成Unicode UnicodeToGB2312(wTemp, &newCharBuffer[nCBIndex]); //再把Unicode 转成 GB2312 index += 3; //源字符串偏移量3 nCBIndex += 2; //目标字符串偏移量2 因为一个中文UTF-8占3个字节,GB2312占两个字节 }}newCharBuffer[nCBIndex] = '\0'; //结束符 strcpy(str, newCharBuffer);delete newCharBuffer; //避免内存泄漏,这是对源代码的稍许修改 newCharBuffer = NULL;return str;}int main(){ifstream in("ReadMe.txt", ios::in);if (!in.is_open()){cout << "open fail..." << endl;in.close();return 0;}char readBuff[1024];while (!in.eof()){in.getline(readBuff, 1024);TranslateUTF8ToGB(readBuff, 1024);cout << readBuff << endl;}in.close(); return 0;}
阅读全文
0 0
- ifstream打印汉字乱码问题 UTF-8转GB2312
- URL链接中汉字乱码转UTF-8和gb2312
- GB2312与UTF-8 汉字编辑问题
- 汉字问题 UTF-8编码 乱码如何实现汉字转化
- Utf-8和Gb2312乱码问题的终结
- 网页乱码 UTF-8与GB2312 及 JSP中文问题
- smarty截取中文字符乱码问题?gb2312-------utf-8
- 关于Weblogic GBK/GB2312/UTF-8乱码的问题
- prototypes JSON 中文乱码问题 (UTF-8 GB2312 GBK)
- PHP utf-8和gb2312编码转换乱码的问题
- Qt QString 中文 char* UTF-8 QByteArray QTextCodec unicode gb2312 GBK 乱码与转码问题
- GB2312转UTF-8
- UTF-8转GB2312
- UTF-8转GB2312
- utf-8转GB2312
- gb2312转utf-8
- gb2312 转 utf-8
- ASP写的汉字转换UTF-8及UTF-8转GB2312
- 输入输出
- Spark Streaming实现实时WordCount,DStream的使用,updateStateByKey(func)实现累计计算单词出现频率
- iOS SDK 瘦身技巧
- 一份Makefile的详解
- == 与 equals
- ifstream打印汉字乱码问题 UTF-8转GB2312
- C++动态内存管理
- 基于 Laradock 创建 Laravel 项目实例
- TensorFlow打印tensor值
- ARM汇编基础知识学习1(ARMV7 32位)
- Rxjava2中Concat操作符onNext,OnError,OnComplte的执行顺序
- Maven学习总结(41)——Maven依赖范围、传递、排除详解
- ubuntu16.04lts突然不能联网解决方法
- HDOJ2024C语言合法标识符