在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

C#/VB.NET


—END—

以上是关于在VB中,如果检测到某文本文件为非UTF8格式则自动转换为UTF8格式?的主要内容,如果未能解决你的问题,请参考以下文章

python怎么把日期格式调整为非文本格式?

VB如何把文件内容显示在文本框中?

vb6.0关于.csv文件的操作

Notepad++ 使用Python 插件批量 转换文本文件(字幕文件) 为 UTF8

批量将ANSI文本txt文件转换成UTF8编码格式 (vbs方法)

发送 VB.NET 后电子邮件不保持格式