PowerBuilder 12 如何确定输入文件的编码

3

我对PowerBuilder 12还不熟悉,想知道是否有办法确定输入文件的编码(例如Unicode、BIG5)。感谢任何意见和代码示例! 谢谢!

2个回答

1

来自PB 12.5帮助文件:

FileEncoding(文件名)

文件名:您想测试编码类型的文件名称

返回值 EncodingANSI! EncodingUTF8! EncodingUTF16LE! EncodingUTF16BE! 如果文件名不存在,则返回null。


0

如果假定 Unicode 文件具有 BOM 前缀(尽管事实并非所有的 Unicode 文件都有此前缀),那么找到 Unicode 就很容易了。下面是一些代码。然而,我对 Big5 没有任何头绪;根据规范的初步查看,它似乎没有类似的前缀。

祝好运,

Terry

function of_filetype (string as_filename) returns encoding

integer li_NullCount, li_NonNullCount, li_OffsetTest
long ll_File
encoding le_Return
blob lblb_UTF16BE, lblb_UTF16LE, lblb_UTF8, lblb_Test, lblb_BOMTest, lblb_Null

lblb_UTF16BE = Blob ("~hFE~hFF", EncodingANSI!)
lblb_UTF16LE = Blob ("~hFF~hFE", EncodingANSI!)
lblb_UTF8 = Blob ("~hEF~hBB~hBF", EncodingANSI!)
lblb_Null = blobmid (blob ("~h01", encodingutf16le!), 2, 1)

SetNull (le_Return)

// Get a set of bytes to test
ll_File = FileOpen (as_FileName, StreamMode!, Read!, Shared!)
FileRead (ll_File, lblb_Test)
FileClose (ll_File)

// test for BOMs: UTF-16BE (FF FE), UTF-16LE (FF FE), UTF-8 (EF BB BF)
lblb_BOMTest = BlobMid (lblb_Test, 1, Len (lblb_UTF16BE))
IF lblb_BOMTest = lblb_UTF16BE THEN RETURN EncodingUTF16BE!

lblb_BOMTest = BlobMid (lblb_Test, 1, Len (lblb_UTF16LE))
IF lblb_BOMTest = lblb_UTF16LE THEN RETURN EncodingUTF16LE!

lblb_BOMTest = BlobMid (lblb_Test, 1, Len (lblb_UTF8))
IF lblb_BOMTest = lblb_UTF8 THEN RETURN EncodingUTF8!

//I've removed a hack from here that I wouldn't encourage others to use, basically checking for 
//0x00 in places I'd "expect" them to be if it was a Unicode file, but that makes assumptions

RETURN le_Return

谢谢Terry!我会试一下。 - KenC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接