00X集—vba代码将汉字用(utf-8)编码写入文本文档

2024-02-25 21:44

本文主要是介绍00X集—vba代码将汉字用(utf-8)编码写入文本文档,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 以下代码尚有bug,需完善

Public Function StringToUtf8ByteArray(ByVal filePath As String, s As String) As Byte()
    Dim i As Long, j As Long
    Dim result() As Byte
    Dim charCode As Integer
    Dim bytesRequired As Integer
    Dim char As String
      
    ' 初始化数组以容纳至少一个字符(单字节)
    ReDim result(0)
      
    ' 遍历字符串中的每个字符
    For i = 1 To Len(s)
        char = Mid(s, i, 1) ' 获取单个字符
        charCode = AscW(char)
          
        ' 根据字符的 Unicode 码点确定所需的字节数
        If charCode < 128 Then
            ' 单字节字符
            bytesRequired = 1
        ElseIf charCode < 2048 Then
            ' 双字节字符
            bytesRequired = 2
        ElseIf charCode < 65536 Then
            ' 三字节字符
            bytesRequired = 3
        Else
            ' 不支持的字符(超出三字节范围)
            MsgBox "字符串包含不支持的 UTF-8 字符。"
            Exit Function
        End If
          
        ' 如果当前数组空间不足,则扩展它
        If UBound(result) + bytesRequired > i - 1 Then
            If i = 1 Then
                ReDim Preserve result(bytesRequired - 1)
             Else
                ReDim Preserve result(i + bytesRequired - 1)
            End If
        End If
          
        ' 将字符的 UTF-8 编码写入数组
    
'            result(i + j - 1) = 0 ' 清除任何现有数据
            Select Case bytesRequired
                Case 1
                    result(i) = charCode
                Case 2
                    result(i + 1) = 192 + (charCode \ 64)
                    result(i) = 128 + (charCode Mod 64)
                Case 3
                    result(i + 1) = 224 + (charCode \ (64 * 64))
                    result(i) = 128 + ((charCode Mod (64 * 64)) \ 64)
                    result(i - 1) = 128 + (charCode Mod 64)
            End Select
     
        ' 更新索引以反映已写入的字节数
'        i = i + bytesRequired
    Next i
      
    ' 重新定义数组大小以移除未使用的空间
'    ReDim Preserve result(UBound(result) - (UBound(result) - i + 1))
'
'    ' 返回字节数组
    StringToUtf8ByteArray = result

End Function
  
' 将文本追加到 UTF-8 编码的文件中的子程序
Sub AppendTextToUtf8File()
    Dim filePath As String
    Dim fileNo As Integer
    Dim textToAppend As String
    Dim UTF8Bytes() As Byte
    Dim i As Long
    ' 设置文件路径
    filePath = "D:\ZD\1111.txt" ' 替换为你的文件路径
      
    ' 要追加的文本(汉字“你好”)
    textToAppend = "大"
      
    ' 将文本转换为 UTF-8 字节数组
    UTF8Bytes = StringToUtf8ByteArray(filePath, textToAppend)
        ' 以追加模式打开文件
    fileNo = FreeFile()
    Open filePath For Binary As #fileNo
      
    ' 写入 UTF-8 字节到文件
    
    For i = LBound(UTF8Bytes) To UBound(UTF8Bytes)
        Put #fileNo, 5, UTF8Bytes(i)
    Next i
      
    ' 关闭文件
    Close #fileNo
 
      
    ' 可选:显示消息框以确认操作
    MsgBox "Text has been appended to the file."
End Sub


 

这篇关于00X集—vba代码将汉字用(utf-8)编码写入文本文档的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/746814

相关文章

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim