创建文件时如何指定编码?

How to specify encoding while creating file?

我正在使用 R 脚本创建和追加文件。但我需要将文件保存为 ANSI 编码,即使某些字符是 Unicode 格式。如何保证ANSI编码?

 newfile='\home\user\abc.ttl'
 file.create(newfile)
 text3 <- readLines('\home\user\init.ttl')
 sprintf('readlines %d',length(text3))
 for(k in 1:length(text3))
 {
  cat(text3[[k]],file=newfile,sep="\n",append=TRUE)
 }

编码可能很棘手,因为您需要在输入时检测编码,然后需要在写入前进行转换。这里听起来您的输入文件 input.ttl 被编码为 UTF-8,您需要将其转换为 ASCII。这意味着您可能会丢失一些不可翻译的字符,因为可能没有从 UTF-8 字符到 128 位较低范围之外的 ASCII 的映射。 (在此范围内UTF-8到ASCII的映射是一样的。)

下面是如何做到这一点。由于您没有提供可重现示例所需的元素,因此您必须相应地修改代码才能进行测试。

  1. 确保您的输入文件实际上是 UTF-8,并且您正在以 UTF-8 格式读取它。您可以通过将 encoding = "UTF-8" 添加到代码的第三行,作为 readLines() 的参数来实现。请注意,您可能无法在 Windows 平台上将系统区域设置为 UTF-8,但文件仍将被读取为 UTF-8,即使扩展字符可能无法正确显示。

  2. 使用iconv()将文本从 UTF-8 转换为 ASCII。 iconv() 是矢量化的,因此它适用于整组文本。您可以使用

    text3 <- iconv(text3, "UTF-8", "ASCII", sub = "")
    

    请注意,sub = "" 参数会阻止在遇到任何不可翻译的字符时将整个字符元素转换为 NA 的默认行为。 (包括"smart quotes"等看似无辜实则邪恶的东西。)

  3. 现在,当您使用 cat() 写入文件时,输出应该是 ASCII。