PB如何判断一个txt文件的编码方式

caobob 2010-04-22 05:24:04
RT,谢谢帮忙。
...全文
417 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmwmmw_bj 2011-07-19
  • 打赏
  • 举报
回复
试了,怎么都返回的是0呢。UTF-8的也返回的是0,我跟踪了一下,ll_first[1],ll_first[2],ll_first[3],ll_first[4]得到的都是0呢。
caobob 2010-04-23
  • 打赏
  • 举报
回复
谢谢LS各位
new4everlau 2010-04-23
  • 打赏
  • 举报
回复
学习了,顶!
永生天地 2010-04-22
  • 打赏
  • 举报
回复
1#说得倒不错,可惜不是pb的语法

//f_gettxtcode 判断文本的编码格式
//参数 string as_filename 文件名
//返回如下
/*
开头字节 Charset/encoding

EF BB BF UTF-8
FE FF UTF-16/UCS-2, little endian
FF FE UTF-16/UCS-2, big endian
FF FE 00 00 UTF-32/UCS-4, little endian.
00 00 FE FF UTF-32/UCS-4, big-endian.
*/
integer li_FileNum,li_bytes
li_FileNum = FileOpen(as_filename, StreamMode!)
long ll_first[]
blob lb_data
li_bytes = FileRead(li_FileNum, lb_data)
ll_first[1]=asc(string(blobmid(lb_data,1,1)))
ll_first[2]=asc(string(blobmid(lb_data,2,1)))
ll_first[3]=asc(string(blobmid(lb_data,3,1)))
ll_first[4]=asc(string(blobmid(lb_data,4,1)))

if ll_first[1]=239 and ll_first[2]=187 and ll_first[3]=191 then
return 1//utf-8
end if
if ll_first[1]=254 and ll_first[2]=255 then
return 2//utf-16
end if
if ll_first[1]=255 and ll_first[2]=254 then
return 3//utf-16
end if
if ll_first[1]=255 and ll_first[2]=254 and ll_first[3]=0 and ll_first[4]=0 then
return 4//utf-32
end if
if ll_first[1]=0 and ll_first[2]=0 and ll_first[1]=254 and ll_first[2]=255 then
return 5//utf-32
end if

return 0//ansi
archlwh 2010-04-22
  • 打赏
  • 举报
回复
mark!学习了
yyss66 2010-04-22
  • 打赏
  • 举报
回复
收藏,QQQ
sewinten 2010-04-22
  • 打赏
  • 举报
回复
读上文件的头两个字节
case 0xefbb: //"UTF-8"
break;
case 0xfffe: // unicode小端格式
break;
case 0xfeff: //"Unicode big endian"
break;
default: //ANSI
break;

680

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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