社区
C++ Builder
帖子详情
Unicode编码转换成GBK编码(急,在线等)
guyong009
2007-05-08 10:19:09
在c++ builder 里,怎么把Unicode编码的txt文件内容转换成GBK编码?
...全文
6654
45
打赏
收藏
Unicode编码转换成GBK编码(急,在线等)
在c++ builder 里,怎么把Unicode编码的txt文件内容转换成GBK编码?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
45 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Lghost
2011-08-27
打赏
举报
回复
关注有没java的方法?
VC_ZSY
2010-04-30
打赏
举报
回复
学习···
jacknes009
2007-05-12
打赏
举报
回复
学习中
yctin
2007-05-11
打赏
举报
回复
在 FileRead(hFile, srcBuff, nSize); 前面加
FileSeek(hFile,0,0);
这句再看看
guyong009
2007-05-11
打赏
举报
回复
Utf8ToUnicode(destBuff,srcBuff,nSize * 2);里srcBuff的值是乱码,看不出来是否准确;
FileWrite(hFile,destBuff,wcslen(destBuff) * 2);里destBuff的值是:
"\X62DF\X4F20\X771tiff\..."(...部分的内容我这里省略不写了),而我原文件里的值是“虚拟传真tiff...”),转换后变为"拟传真tiff...",第一个字“虚”没了
yctin
2007-05-11
打赏
举报
回复
我试过是不会掉字的
yctin
2007-05-11
打赏
举报
回复
你在这里设断点看看destBuff是否正确
FileWrite(hFile,destBuff,wcslen(destBuff) * 2);
看看这里srcBuff的HEX是否正确(原文件的第四btye开始)
Utf8ToUnicode(destBuff,srcBuff,nSize * 2);
guyong009
2007-05-11
打赏
举报
回复
TO:yctin(呆呆鱼)
昨天上不了网,郁闷。今天刚测试了下你写的UTF8FileConvertToUnicode,能正常转换了,不会乱码了,但转换后第一个字会没掉,这个这么办?
guyong009
2007-05-11
打赏
举报
回复
刚调试了下,
nSize = FileSeek(hFile,0,2);
if (nSize < 4) {
return;
}
执行这段代码时nSize 的值为2,所以就退出来了。
我是这样调用的:(path是文件路径)
UTF8FileConvertToUnicode(path.c_str(),path.c_str());
UnicodeFileConvertToAnsi(path.c_str(),path.c_str());
guyong009
2007-05-11
打赏
举报
回复
你上面写的UnicodeFileConvertToAnsi是转成GBK吗?
调用完UTF8FileConvertToUnicode再调用UnicodeFileConvertToAnsi会报错:
access violation at 0x00472cc9 write of address 0x00030d90
guyong009
2007-05-11
打赏
举报
回复
这样改就可以了。现在utf-8转换成Unicode可以了,但还需要把Unicode再转换成GBK,是不是调用完再UTF8FileConvertToUnicode调用UnicodeFileConvertToAnsi就可以了?
rainv
2007-05-09
打赏
举报
回复
mark
guyong009
2007-05-09
打赏
举报
回复
NowCan(城市浪人) 说的是,我是刚学BCB的,类型转换的问题我现在弄好了,现在还有哪个转换成GBK编码的问题还没好,不知道怎么弄。
NowCan
2007-05-09
打赏
举报
回复
怀疑楼主会不会BCB。String怎么转成char *,你不会查BCB的帮助啊?
guyong009
2007-05-09
打赏
举报
回复
另外,我把要转换的文件的路径是保存在String path这个变量里的,比如
String path="c:\\a.txt";这样UnicodeFileConvertToAnsi(path,"c:\\b.txt");不能调用,这个问题要怎么解决?
guyong009
2007-05-09
打赏
举报
回复
TO:yctin(呆呆鱼):
用你写的新的,可以转换了,但转换后还是乱码,你这个转换后是什么编码?我想要GBK编码的,麻烦你再帮我改下可以吗
ahjoe
2007-05-09
打赏
举报
回复
WideString ws;
AnsiString s;
ws = "Unicode编码";
s = ws;
Edit1->Text = s;
不能再简单了。
yctin
2007-05-09
打赏
举报
回复
换成这个吧
都跟你说那个档案不是unicode =.=
这个可以处理非unicode 的档案(复制一份=口=)
void UnicodeFileConvertToAnsi(char *src,char *dest)
{
wchar_t *srcBuff;
char *destBuff;
int hFile;
int nSize;
if (!FileExists(src)) {
return;
}
hFile = FileOpen(src,0);
FileRead(hFile, destBuff, 2);
nSize = FileSeek(hFile,0,2);
if (nSize < 4) {
FileClose(hFile);
return;
}
destBuff = (char*)malloc(2);
FileSeek(hFile,0,0);
FileRead(hFile, destBuff, 2);
if (!~destBuff[0] && !(destBuff[1] + 2)) {
free(destBuff);
destBuff = (char*)malloc(nSize);
srcBuff = (wchar_t*)malloc(nSize + 1);
memset(srcBuff,0x00,nSize + 1);
FileRead(hFile, srcBuff, nSize);
FileClose(hFile);
strcpy(destBuff,WideCharToString(srcBuff).c_str());
free(srcBuff);
hFile = FileCreate(dest);
FileWrite(hFile,destBuff,strlen(destBuff));
} else {
free(destBuff);
destBuff = (char*)malloc(nSize);
FileSeek(hFile,0,0);
FileRead(hFile, destBuff, nSize);
FileClose(hFile);
hFile = FileCreate(dest);
FileWrite(hFile,destBuff,nSize);
}
FileClose(hFile);
free(destBuff);
}
yctin
2007-05-09
打赏
举报
回复
....... =.=
void UTF8FileConvertToUnicode(char *srcFile,char *destFile)
{
char UnicodeHeader[2] = {0xff,0xfe};
char UTF8Header[3] = {0xef,0xbb,0xbf};
char *srcBuff;
wchar_t *destBuff;
int hFile;
int nSize;
if (!FileExists(srcFile)) {
return;
}
hFile = FileOpen(srcFile,0);
nSize = FileSeek(hFile,0,2);
if (nSize < 3) {
FileClose(hFile);
return;
}
srcBuff = (char*)malloc(3);
FileSeek(hFile,0,0);
FileRead(hFile, srcBuff, 3);
if (!memcmp(UTF8Header,srcBuff,3)) {
free(srcBuff);
destBuff = (wchar_t*)malloc(nSize * 2);
srcBuff = (char*)malloc(nSize + 1);
memset(srcBuff,0x00,nSize + 1);
memset(destBuff,0x00,nSize * 2);
FileRead(hFile, srcBuff, nSize);
FileClose(hFile);
Utf8ToUnicode(destBuff,srcBuff,nSize * 2);
hFile = FileCreate(destFile);
FileWrite(hFile,UnicodeHeader, 2);
FileWrite(hFile,destBuff,wcslen(destBuff) * 2);
}
FileClose(hFile);
free(srcBuff);
free(destBuff);
}
guyong009
2007-05-09
打赏
举报
回复
TO:yctin(呆呆鱼):
如果按ahjoe(强哥) 说的,
WideString ws;
AnsiString s;
ws = "Unicode编码";
s = ws;
Edit1->Text = s;
那么,ws = "Unicode编码";这行要改成:把c:\\a.txt文件里的内容复制到ws,也就是说要读取c:\\a.txt的内容到ws,然后再把s里的内容写回到c:\\a.txt。这样要怎么改?
帮我搞定了我另外开贴加100分,这个问题很着急呀,谢谢了~~
加载更多回复(25)
Unicode
转
GBK
:
编码
转换的深入解析
本文还有配套的精品资源,点击获取 简介:字符
编码
是计算机系统存储和处理文本的关键。本文深入探讨
Unicode
转
GBK
的过程,包括
Unicode
和
GBK
编码
的定义、工作原理及转换方法。
Unicode
旨在包括全球所有文字系统,而
GBK
是中国大陆的中文字符扩展
编码
。转换涉及
编码
转换算法,处理
Unicode
码点与
GBK
字节序列的转换,不支持的字符可能丢失或替换。在实际应用中,如中文...
【免费下载】 中文
编码
转换利器:
GBK
、UTF-8与
Unicode
编码
转换工具
中文
编码
转换利器:
GBK
、UTF-8与
Unicode
编码
转换工具 【下载地址】
GBK
UTF-8与
Unicode
编码
转换工具 `
gbk
_utf8_
unicode
.zip` 是一个资源文件,包含了用于处理中文
编码
转换的工具和脚本。该资源文件的主要用途是将云端传输下来的
Unicode
编码
中文转换为UTF-8格式,并进一步转换为...
Unicode
与
GBK
编码
转换及点阵字库应用
字符
编码
(Character Encoding)是指一种将字符集中的字符映射为计算机可读的数字序列的方法。这种映射方式使得文本能够在计算机系统中存储、传输和处理。
Unicode
的出现是为了解决传统字符
编码
方案中存在的诸多问题。它试图为世界上所有的字符提供一个统一的
编码
体系,从而实现跨平台、跨语言的文本交换。
GBK
编码
标准的产生,是中文信息处理历史上的一个重要里程碑。它是为了满足中国大陆处理中文字符的需求而设计的,本质上是对GB2312
编码
的扩展。
unicode
与
gbk
双向
编码
转换(分离底层,便于移植)
unicode
与
gbk
双向
编码
转换表在短信解析,FATFS长文件名等都有用到,我一般是将
编码
表放置于外部falsh,与字库放到一起,本次将
编码
表的底层进行了分离,并且对
编码
表进行检测,具体实现如下:底层存储器接口分离后,可以将
编码
表存放于内存,内部flash,外部flash,外部TF卡等等地方,代码与平台无关。
unicode
_
gbk
.c/******************************...
C语言实现中文BGK、
UNICODE
、UTF8之间的
编码
转换
C语言实现中文
编码
转换一、
GBK
、
UNICODE
、UTF8之间
编码
的关系二、
UNICODE
、UTF8之间转化实现三、
UNICODE
、
GBK
之间的转化四、
编码
对照表五、完整代码 一、
GBK
、
UNICODE
、UTF8之间
编码
的关系
GBK
:
GBK
全名为汉字内码扩展规范,英文名Chinese Internal Code Specification。
GBK
采用双字节表示,总体
编码
范围为8140-FEFE,首字节在81-FE 之间,尾字节在40-FE 之间,剔除 xx7F一条线。总计23940 个码位,共收入218
C++ Builder
13,873
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章