各位,请教c/c++ 编程里遇到的汉字编码问题!

冷卡卡西 2008-10-19 09:00:53
在linux中编写的c/c++程序,程序的格式是ANSI,比如我定义一个变量 char *str = "卖拐";那么,“卖拐”这两个字的格式就应该是ANSI的。现在在一个文本文件中,有“卖拐”两个字,而文本文件的编码格式是UTF-8,或者是gb2312。
那么,我如何在程序中识别文件中的“卖拐”两个字呢?
...全文
210 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
herman~~ 2008-10-27
  • 打赏
  • 举报
回复
哈哈 比较bit位
冷卡卡西 2008-10-27
  • 打赏
  • 举报
回复
不好意思我没说清楚,我是在Linux环境下要进行转化,三楼朋友的方法的确是很好的,可惜只能在windows下,因为MultiByteToWideChar是windows提供的。
由于我比较的汉字不多,所以最后采用了2楼朋友的“野蛮”的方法,不过效果是达到了!
谢谢各位朋友的建议!
冷卡卡西 2008-10-19
  • 打赏
  • 举报
回复
直接比较我试过了,是不行的,因为他们的bit位是不同的,从文件中读取“卖拐”,然后用strlen()计算它的长度,程序中的“卖拐”只占4位,而从文件读取的占9位。我读取文件中时使用的是:
ifstream infile("a.txt");
string str;
infile>>str;
char *s = (char *)str.c_str();
cout<<strlen(s)<<endl;//为9
程序中的是:
char *s1 = "卖拐";
cout<<strlen(s1)<<endl;//为4
我觉得,应该是将文件中的“卖拐”从UTF-8格式转换为ANSI,但是保证其转换后的ANSI码的内容还是“卖拐”,是通过什么原理实现呢?有什么函数可以帮忙码?
星羽 2008-10-19
  • 打赏
  • 举报
回复
先读出来,再用MultiByteToWideChar转乘WCHAR,然后就可以比较了
星羽 2008-10-19
  • 打赏
  • 举报
回复

#include "iostream"
#include "fstream"
#include "windows.h"
using namespace std;

int main()
{
ifstream ifile("test.txt");
char szUTF8[128];
ifile.getline(szUTF8, 128);

int nLen = MultiByteToWideChar( CP_UTF8, 0, szUTF8, -1, NULL, NULL );//得到UTF8编码的字符串长度,是2
LPWSTR lpwsz = new WCHAR[nLen];
MultiByteToWideChar( CP_UTF8, 0, szUTF8, -1, lpwsz, nLen );//转换的结果是UCS2格式的价值两个字

cout<<lpwsz<<endl;

delete[] lpwsz;

return 0;
}


chlaws 2008-10-19
  • 打赏
  • 举报
回复
野蛮点,就比较bit位
帅得不敢出门 2008-10-19
  • 打赏
  • 举报
回复
读取出来到字符串中 直接strcmp比较 行不行

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧