在VB中,如果检测到某文本文件为非UTF8格式则自动转换为UTF8格式?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在VB中,如果检测到某文本文件为非UTF8格式则自动转换为UTF8格式?相关的知识,希望对你有一定的参考价值。
在VB中,如果检测到某文本文件为非UTF8格式则自动转换为UTF8格式,这样代码该怎么写呢?
谢谢各位。
Private Sub Command1_Click()
Dim TempFile As Long
Dim LoadBytes() As Byte
'以二进制读入文件内容
TempFile = FreeFile
filepath = "c:\example.txt"
Open filepath For Binary As #TempFile
ReDim LoadBytes(1 To LOF(TempFile)) As Byte
Get #TempFile, , LoadBytes
Close TempFile
'On Error GoTo NoEncoding
Dim i As Integer, FileCharset As String, strFileHead As String
'从二进制流中分析文件头的编码信息
For i = 1 To 3
strFileHead = strFileHead & Hex(LoadBytes(i))
Next
'判断文件采用了何种编码
If strFileHead = "EFBBBF" Then
'前3个byte如果为 EF BB BF 则表示为 UTF-8编码
FileCharset = "UTF-8"
Else
strFileHead = Left(strFileHead, 4)
If Left(strFileHead, 4) = "FEFF" Then
'此时为 unicode big endian 编码
FileCharset = "Unicode big endian"
ElseIf Left(strFileHead, 4) = "FFFE" Then
'此时为 unicode 编码
FileCharset = "UNICODE"
Else
'否则默认为普通简体中文 GB2312
'你如果知道其它编码的格式还可以继续的分析判断!
FileCharset = "GB2312"
End If
End If
MsgBox filepath & " Text Format is " & FileCharset
End Sub 参考技术A 把下面代码放到模块中,然后调用FileToUTF8即可。声明:此非原创,但记不清作者了,抱歉。
Public Enum Encoding
ANSI
Unicode
UnicodeBigEndian
UTF8
End Enum
Public Function GetEncoding(FileName As String) As Encoding
On Error GoTo Err
Dim fBytes(1) As Byte, freeNum As Integer
freeNum = FreeFile
Open FileName For Binary Access Read As #freeNum
Get #freeNum, , fBytes(0)
Get #freeNum, , fBytes(1)
Close #freeNum
If fBytes(0) = &HFF And fBytes(1) = &HFE Then GetEncoding = Unicode
If fBytes(0) = &HFE And fBytes(1) = &HFF Then GetEncoding = UnicodeBigEndian
If fBytes(0) = &HEF And fBytes(1) = &HBB Then GetEncoding = UTF8
Err:
End Function
Public Sub FileToUTF8(FileName As String)
If GetEncoding(FileName) = UTF8 Then
'如果是UTF8格式,则退出
'否则,进行转换
Exit Sub
End If
Dim fBytes() As Byte, uniString As String, freeNum As Integer
Dim ADO_Stream As Object
freeNum = FreeFile
ReDim fBytes(FileLen(FileName))
Open FileName For Binary Access Read As #freeNum
Get #freeNum, , fBytes
Close #freeNum
uniString = StrConv(fBytes, vbUnicode)
Set ADO_Stream = CreateObject("ADODB.Stream")
With ADO_Stream
.Type = 2
.Mode = 3
.Charset = "UTF-8"
.open
.WriteText uniString
.SaveToFile FileName, 2
.Close
End With
Set ADO_Stream = Nothing
End Sub 参考技术B 进来学习一下
C#/VB.NET 将RTF转为PDF
带有. rtf文件扩展名的文件是一种富文本(Rich Text Format)格式文件,可以被大多数的文字处理程序打开,也很方便编辑。但在日常工作中,如果需要共享和打印文档,建议可以将RTF转换为PDF进行进一步处理。本文,将通过C#及VB.NET程序来展示如何将RTF转换为PDF。
一、dll引用
方法1
在程序中引入Spire.Doc.dll文件;将Free Spire.Doc for .NET下载到本地,解压,安装。安装完成后,找到安装路径下BIN文件夹中的Spire.Doc.dll。然后在Visual Studio中打开“解决方案资源管理器”,鼠标右键点击“引用”,“添加引用”,将本地路径BIN文件夹下的dll文件添加引用至程序。
方法2
通过NuGet安装。可通过以下2种方法安装:
1.可以在Visual Studio中打开“解决方案资源管理器”,鼠标右键点击“引用”,“管理NuGet包”,然后搜索“Free Spire.Doc”,点击“安装”。等待程序安装完成。
2.将以下内容复制到PM控制台安装。
Install-Package FreeSpire.Doc -Version10.2.0
二、将RTF转为PDF
Free Spire.Doc for .NET提供了方法可直接用于加载RTF文档,并通过以下步骤将RTF转为PDF:
- 创建Document类的实例。
- 调用Document.LoadFromFile(string fileName, FileFormat fileFormat)方法加载RTF文件。
- 使用Document.SaveToFile(string fileName, FileFormat fileFormat)方法保存为PDF格式到指定路径。
C#
using Spire.Doc;
namespace RTFtoPDF
class Program
static void Main(string[] args)
//创建Document类的实例
Document doc = new Document();
//加载RTF文档
doc.LoadFromFile("sample.rtf", FileFormat.Rtf);
//保存为PDF格式
doc.SaveToFile("RTFtoPDF.pdf", FileFormat.PDF);
VB.NET
Imports Spire.Doc
Namespace RTFtoPDF
Class Program
Private Shared Sub Main(args As String())
创建Document类的实例
Dim doc As New Document()
加载RTF文档
doc.LoadFromFile("sample.rtf", FileFormat.Rtf)
保存为PDF格式
doc.SaveToFile("RTFtoPDF.pdf", FileFormat.PDF)
End Sub
End Class
End Namespace
—END—
以上是关于在VB中,如果检测到某文本文件为非UTF8格式则自动转换为UTF8格式?的主要内容,如果未能解决你的问题,请参考以下文章
Notepad++ 使用Python 插件批量 转换文本文件(字幕文件) 为 UTF8