使用 Ruby 将 UTF8 转换为 ANSI

发布于 2024-07-08 13:03:52 字数 258 浏览 7 评论 0原文

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

然后,我需要使用 Excel 打开此文件,但 Excel 无法获取 UTF8,因此我始终需要在能够将 UTF8 转换为 ANSI 的文本编辑器中打开该文件。

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

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

I have a Ruby script that generates a UTF8 CSV file remotely in a Linux machine and then transfers the file to a Windows machine thru SFTP.

I then need to open this file with Excel, but Excel doesn't get UTF8, so I always need to open the file in a text editor that has the capability to convert UTF8 to ANSI.

I would love to do this programmatically using Ruby and avoid the manual conversion step. What's the easiest way to do it?

PS: I tried using iconv but had no success.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

成熟的代价 2024-07-15 13:03:52
ascii_str = yourUTF8text.unpack("U*").map{|c|c.chr}.join

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

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

assuming that your text really does fit in the ascii character set.

翻身的咸鱼 2024-07-15 13:03:52

我终于设法使用 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 }

就是这样!

I finally managed to do it using iconv, I was just messing up the parameters. So, this is how you do it:


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 }

That's it!

日久见人心 2024-07-15 13:03:52

我在尝试从服务器上用户生成的内容生成 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 的精彩博客文章,讨论了更详细地说。

I had a similar issue trying to generate CSV files from user-generated content on the server. I found the unidecoder gem which does a nice job of transliterating unicode characters into ascii.

Example:

"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"

For our simple use case, this worked well.

Pivotal Labs has a great blog post on unicode transliteration to ascii discussing this in more detail.

念﹏祤嫣 2024-07-15 13:03:52

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

yourstring.encode('ASCII')

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

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

Since ruby 1.9 there is an easier way:

yourstring.encode('ASCII')

To avoid problems with invalid (non-ASCII) characters you can ignore the problems:

yourstring.encode('ASCII', invalid: :replace, undef: :replace, replace: "_")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文