社区
C++ Builder
帖子详情
Unicode编码转换成GBK编码(急,在线等)
guyong009
2007-05-08 10:19:09
在c++ builder 里,怎么把Unicode编码的txt文件内容转换成GBK编码?
...全文
6545
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)
文本文件
编码
转换工具
gbk
utf8 gb2312
写此贴为记录自己的学习历程,供后来者以观. 原因,我决定学习PHP+MYSQL之后选择了用整合包的环境(因为我懒) 经过历时一个星期的比较 揣摩 测试之后选择了 VertrigoServ 可是它美中不足的是mysql里中文显示"????????".最后几经周折总算解决了. 方法如下: 1)在phpmyadmin 中建库的时候一切默认 2)建表时候一切默认;至于导入*.SQL没试应该是不用动什么 3)在 php 文件头部加入 "说明此文件
编码
为utf8" 4)在 mysql_select_db("表名",$id); 后面加入一行 mysql_query("set names utf8;"); 5)*.php 文件在存盘的时候也以 "utf-8"
编码
存盘. 如此一来整站
编码
就都是国际能用的utf8
编码
了.通用性现在做到最好了. 问题也是有的,在此环境下涉及到数据库运行的文件都必须是 utf8
编码
.这样一来就出现了不兼容,因为在国内大家都是以
GBK
gb2312编的码 包括 17PHP.com 网站里的学习源码文件(我用的是77例中的) 和很多插件 论坛代码... ...Discuz!也是的 解决起来很简单,把它们的
编码
都改成 utf8 好了. 批量文件转码工具
c语言
unicode
编码
转
gbk
,基于C语言的
GBK
-
Unicode
文本
编码
转换系统的实现
1.引言到文件*/文字
编码
是给文字编制二进制存储代码的技术,
编码
方案FILE*fp=fopen(filename,"wb");有很多种,在显示字符时如果采用了不正确的
编码
标准,就会unsignedinthigh,low,i;//N=5出现乱码。本文研究文本的转换技术在国内可查到的期刊论文unsignedintstar[tN]={0xB0A1,0x8140,0xAA40,0xA1A1,数量较少[1]...
9节课征服「字符
编码
」
ASCII、GB2312、
GBK
、GB18030
Unicode
、UTF-8、UTF-16、UTF-32
unicode
与
gbk
双向
编码
转换(分离底层,便于移植)
unicode
与
gbk
双向
编码
转换表在短信解析,FATFS长文件名等都有用到,我一般是将
编码
表放置于外部falsh,与字库放到一起,本次将
编码
表的底层进行了分离,并且对
编码
表进行检测,具体实现如下:底层存储器接口分离后,可以将
编码
表存放于内存,内部flash,外部flash,外部TF卡等等地方,代码与平台无关。
unicode
_
gbk
.c/******************************...
GBK
与
UNICODE
编码
互转
对经常玩单片机的人员来说都知道怎样通过软件制作
GBK
字库,再使用
GBK
公式计算处理在LCD屏上显示中文汉字,如果不知道
GBK
制作软件及方式的话可以通过文末链接下载学习;这里主要是介绍
UNICODE
与
GBK
的相互转化,在一些应用场景可能只有
UNICODE
编码
然后中文形式显示在LCD屏上,这时可能需要转换为
GBK
编码
。
GBK
与
UNICODE
没有直接对应的关系,通过查表方式将两者联系起来,具体实...
C++ Builder
13,825
社区成员
102,678
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章