【问题标题】:How to specify encoding while creating file?创建文件时如何指定编码?
【发布时间】:2015-11-10 08:31:05
【问题描述】:

我正在使用 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)
 }

【问题讨论】:

    标签: r ansi rscript


    【解决方案1】:

    编码可能很棘手,因为您需要在输入时检测您的编码,然后您需要在写入之前对其进行转换。听起来您的输入文件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 的默认行为。 (这些包括看似无辜但实际上微妙的邪恶事物,例如“聪明的引号”。)

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

    【讨论】:

    • 无论我写什么到新文件,它都应该是 ANSI 编码。谢谢。我会试试这个..
    猜你喜欢
    • 2011-06-08
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2010-10-31
    相关资源
    最近更新 更多