PB中如何把UNICODE文件转换为UTF8格式文件。

kirao 2006-07-07 03:28:33
PB中如何把UNICODE文件转换为UTF8格式文件。
...全文
1646 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kirao 2006-08-25
  • 打赏
  • 举报
回复
后来我只好用其它语言来写,pb调用。
lzheng2001 2006-07-12
  • 打赏
  • 举报
回复
上面贴的代码,我要分析一下才能知道是什么问题,最近没有太多时间,我就先不管了.
楼主没有解决的话,可以参考以下vb代码.
因为vb的string是unicode类型的,在pb中的string 不是(pb10以下),所以你应该用blob变量来代替string变量.
思路,把文件内容读到blob变量中,然后参考以下方法来转换

Function UniStrToUTF8(UniString) As Byte()
' Convert a Unicode string to a byte stream of UTF-8
Dim BArray() As Byte
Dim TempB() As Byte
Dim i As Long
Dim k As Long
Dim TLen As Long
Dim b1 As Byte
Dim b2 As Byte
Dim UTF16 As Long
Dim j
TLen = Len(UniString) ' Obtain length of Unicode input string
If TLen = 0 Then Exit Function ' get out if there's nothing to convert
k = 0
For i = 1 To TLen
' Work out the UTF16 value of the Unicode character
CopyMemory b1, ByVal StrPtr(UniString) + ((i - 1) * 2), 1
CopyMemory b2, ByVal StrPtr(UniString) + ((i - 1) * 2) + 1, 1
' Combine the 2 bytes into the Unicode UTF-16
UTF16 = b2 ' assign b2 to UTF16 before multiplying by 256 to avoid overflow
UTF16 = UTF16 * 256 + b1
' Convert UTF-16 to 2 or 3 bytes of UTF-8
TempB = ToUTF8(UTF16)
' Copy the resultant bytes to BArray
For j = 0 To UBound(TempB)
ReDim Preserve BArray(k)
BArray(k) = TempB(j): k = k + 1
Next
ReDim TempB(0)
Next
UniStrToUTF8 = BArray ' Return the resultant UTF-8 byte array
End Function
kirao 2006-07-12
  • 打赏
  • 举报
回复
我用的是pb8.0,肯定是没有的,10.0就不太清楚了。
K1933 2006-07-12
  • 打赏
  • 举报
回复
PB10.0之后会不会有语句自行转换呢?
K1933 2006-07-11
  • 打赏
  • 举报
回复
UP,我也试过,没有成功
kirao 2006-07-10
  • 打赏
  • 举报
回复
多谢lzheng2001(1加1),我试了你的方法,文件是可以生成,但是打开文件时已字符变得很乱,
好像不是真正的UTF8文件,不知道什么原因,你能再帮我看下吗?多谢!!!
lzheng2001 2006-07-07
  • 打赏
  • 举报
回复
需要安装类库,好象简称 ADO2.x (2.1-2.8), 一般windows会自带,但不保证每台电脑上都有, 微软网站上可以下载这个类库.

integer li_rtn
OLEObject ole_ADOStream
ole_ADOStream = CREATE OLEObject
li_rtn = ole_ADOStream.ConnectToNewObject("ADODB.Stream")
ole_ADOStream.Type = 1 //二进制数据Binary
ole_ADOStream.Mode =3 //具有读/写权限
ole_ADOStream.Open()
ole_ADOStream.LoadFromFile("c:\1.txt")
ole_ADOStream.Position = 0 //Position为0才能设置Charset
ole_ADOStream.Type = 2 //文本数据
ole_ADOStream.Charset = "UTF-8"
ole_ADOStream.SaveToFile("c:\2.txt",2)
ole_ADOStream.Close()
destroy ole_ADOStream

当然还可以用API,但代码复杂得多.
K1933 2006-07-07
  • 打赏
  • 举报
回复
帮顶!
kirao 2006-07-07
  • 打赏
  • 举报
回复
我指的就是文件编码EF BB BF开头的就是UTF8文件,window的notepad本身就带这种转换
但我现在是要在PB下用程序来转换。
jabincn 2006-07-07
  • 打赏
  • 举报
回复
編碼 ?文件編碼?

1,108

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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