当前位置:  开发笔记 > 编程语言 > 正文

使用Ruby将UTF8转换为ANSI

如何解决《使用Ruby将UTF8转换为ANSI》经验,为你挑选了4个好方法。

我有一个Ruby脚本,可以在Linux机器上远程生成UTF8 CSV文件,然后通过SFTP将文件传输到Windows机器.

然后我需要用Excel打开这个文件,但Excel没有得到UTF8,所以我总是需要在文本编辑器中打开文件,该编辑器能够将UTF8转换为ANSI.

我很乐意使用Ruby以编程方式执行此操作并避免手动转换步骤.最简单的方法是什么?

PS:我尝试过使用iconv但没有成功.



1> AShelly..:
ascii_str = yourUTF8text.unpack("U*").map{|c|c.chr}.join

假设您的文本确实适合ascii字符集.


为了解决Sam遇到的非ASCII错误,可以使用以下命令:yourUTF8text.unpack("U*").map {| c | c.chr rescue'_'} .join

2> Dema..:

我终于设法用iconv做了,我只是弄乱了参数.那么,你就是这样做的:

require 'iconv'

utf8_csv = File.open("utf8file.csv").read

# gotta be careful with the weird parameters order: TO, FROM !
ansi_csv = Iconv.iconv("LATIN1", "UTF-8", utf8_csv).join

File.open("ansifile.csv", "w") { |f| f.puts ansi_csv }

而已!



3> markquezada..:

我有一个类似的问题,试图从服务器上的用户生成的内容生成CSV文件.我找到了unidecoder gem,它可以很好地将unicode字符音译成ascii.

例:

"olá, mundo!".to_ascii                 #=> "ola, mundo!"
"??".to_ascii                        #=> "Ni Hao "
"Jürgen Müller".to_ascii               #=> "Jurgen Muller"
"Jürgen Müller".to_ascii("ü" => "ue")  #=> "Juergen Mueller"

对于我们简单的用例,这很好用.

Pivotal Labs有一篇关于unicode音译的博文,对ascii进行了更详细的讨论.



4> knut..:

从ruby 1.9开始,有一种更简单的方法:

yourstring.encode('ASCII')

为避免无效(非ASCII)字符出现问题,您可以忽略这些问题:

yourstring.encode('ASCII', invalid: :replace, undef: :replace, replace: "_")

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有