当前位置: 首页 > 知识库问答 >
问题:

UCS-2小端到UTF-8转换会使文件带有许多不需要的字符

朱鸿畅
2023-03-14

我有一个脚本,我放在一起经过了许多不同的方式,我可以在VBScript中使用ADODB进行编码转换。

Option Explicit

Sub UTFConvert()
    Dim objFSO, objStream, file

    file = "FileToConvert.csv"

    Set objStream = CreateObject( "ADODB.Stream" )
    objStream.Open
    objStream.Type = 2
    objStream.Position = 0
    objStream.Charset = "utf-8"
    objStream.LoadFromFile file
    objStream.SaveToFile file, 2
    objStream.Close
    Set objStream = Nothing
End Sub

UTFConvert

该文件应该从UCS-2 Little-Endian或其可读格式(在限制范围内)转换为UTF-8。然而,问题是,一旦该文件完成转换为UTF-8,在每个字母前后的整个文件中都有许多NUL符号,并且xFFxFE(UCS-2 LE BOM)位于文件的开头。它们是可见的,无需使用任何符号可视化切换。如果您能帮助我了解我在转换过程中可能受到的限制,我们将不胜感激。或者我可以采取的任何替代方法。

共有1个答案

倪子晋
2023-03-14

您的Stream对象将文件加载为UTF-8编码文件,从而误解了字节序列。使用FileSystemObject实例读取文件,并使用ADODB. Stream对象写入:

Sub UTFConvert(filename)
  Set fso = CreateObject("Scripting.FileSystemObject")
  txt = fso.OpenTextFile(filename, 1, False, -1).ReadAll

  Set stream = CreateObject("ADODB.Stream")
  stream.Open
  stream.Type     = 2 'text
  stream.Position = 0
  stream.Charset  = "utf-8"
  stream.WriteText txt
  stream.SaveToFile filename, 2
  stream.Close
End Sub
 类似资料:
  • 我目前正在工作,并击中一个问题与转换UTF-8字符串到UCS-2字符串与icu库。在图书馆里有几种方法可以做到这一点,但是到目前为止,它们似乎都不起作用,但是考虑到这个图书馆的受欢迎程度,我假设我做错了什么。 首先是通用代码。在所有情况下,我都是在对象上创建和传递字符串,但在它达到转换步骤之前,没有任何操作。 目前使用的utf-8字符串只是“ĩ”。 为了简单起见,我将在这段代码中表示作为使用的字符

  • 我的Git存储库中有一个文件有多个提交,它是用Windows使用的16位Unicode(UCS-2)编码的。 正因为如此,Git认为它是一个二进制文件,而不是文本文件,我看不到不同提交所做的更改。 有没有办法将该文件追溯转换为UTF-8,即重建历史记录,就好像该文件一直是UTF-8,而我一直将其提交为UTF-8文件,而不是16位Unicode文件?

  • 我正在尝试使用iconv将UTF-16BE编码文件(字节顺序标记:0xFE 0xFF)转换为UTF-8,如下所示: 然而,结果输出具有UTF-8字节顺序标记(0xEF 0xBB 0xBF),这不是我需要的。有没有办法告诉iconv(或者有等效的编码)不要在UTF-8结果中放入BOM?

  • 问题内容: 这里有两个问题。我有一组通常是带有BOM的UTF-8文件。我想将它们(理想情况下)转换为没有BOM的UTF-8。似乎可以解决这个问题。但是我真的看不到任何有关用法的好例子。这将是处理此问题的最佳方法吗? 同样,如果我们能够处理清楚知道的不同输入编码(看到的ASCII和UTF-16),那将是理想的。看来这一切都是可行的。是否有一种解决方案可以采用任何已知的Python编码并以UTF-8格

  • 我正在处理一个使用UTF-8编码了两次的遗留文件。例如,编码点()本应编码为,但改为编码为(是的UTF-8编码,是的UTF-8编码)。 假设数据在CP-1252中编码,则执行第二次编码。 为了回到UTF-8编码,我使用了以下(似乎错误)命令 我的问题是iconv似乎无法转换回一些字符。更准确地说,iconv无法转换UTF-8表示形式包含映射到CP-1252中控制字符的字符。一个例子是代码点ρ():

  • 我有一个Go程序,可以读取类似以下代码的文本文件: 游乐场:https://play.golang.org/p/cnDOEFaT0lr 该代码适用于所有文本文件,除了用UCS-2小端编码的文件。如何将文件转换为UFT8格式以读取它?