首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过system()从Ruby调用iconv

通过system()从Ruby调用iconv
EN

Stack Overflow用户
提问于 2010-04-30 16:16:45
回答 1查看 448关注 0票数 0

我有一个关于iconv工具的问题。我尝试以这种方式从rake文件中调用它:

代码语言:javascript
复制
Dir.glob("*.txt") do |file|
  system("iconv -f UTF-8 -t 'ASCII//TRANSLIT' #{ file } >> ascii_#{ file }")
end

但一个文件被部分转换(部分转换的大小: 10059092字节,转换前: 10081854)。通过比较这两个文件,可以证明并非所有内容都写入了ASCII。当我从shell显式调用这个命令时,它工作得很好。其他较小的文件被转换时没有问题。对iconv或Ruby的system()有什么限制吗?

EN

回答 1

Stack Overflow用户

发布于 2010-04-30 16:29:28

检查system的返回值以确定是否成功总是一个好主意。

代码语言:javascript
复制
Dir.glob("*.txt") do |file|
  system("iconv -f UTF-8 -t 'ASCII//TRANSLIT' #{file} >> ascii_#{file}") or
    puts "iconv failed for file #{file}: #{$?}"
end

您还可以尝试使用Iconv标准库,从而摆脱系统调用:

代码语言:javascript
复制
require 'iconv'

source_file = 'utf8.txt'
target_file = 'ascii.txt'

File.open(target_file, 'w') do |file|
  File.open(source_file).each_line do |line|
    file.write Iconv.conv('ASCII//TRANSLIT', 'UTF-8', line)
  end
end

添加了适当的错误检查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2743162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档