문제

Linux 시스템에서 원격으로 UTF8 CSV 파일을 생성 한 Ruby 스크립트가있는 다음 파일을 SFTP를 통해 Windows 시스템으로 전송합니다.

그런 다음이 파일을 Excel로 열어야하지만 Excel은 UTF8을 얻지 못하므로 UTF8을 ANSI로 변환 할 수있는 텍스트 편집기에서 파일을 항상 열어야합니다.

루비를 사용하여 프로그래밍 방식 으로이 작업을 수행하고 수동 변환 단계를 피하고 싶습니다. 가장 쉬운 방법은 무엇입니까?

추신 : 나는 Iconv를 사용해 보았지만 성공하지 못했습니다.

도움이 되었습니까?

해결책

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

텍스트가 실제로 ASCII 문자 세트에 적합하다고 가정합니다.

다른 팁

나는 마침내 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 }

그게 다야!

서버에서 사용자가 생성 한 컨텐츠에서 CSV 파일을 생성하려는 비슷한 문제가있었습니다. 나는 찾았다 단일 코더 유니 코드 문자를 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"

간단한 사용 사례의 경우, 이것은 잘 작동했습니다.

중추적 인 실험실에는 훌륭한 블로그 게시물이 있습니다 ASCII에 대한 유니 코드 음역 이것을 더 자세히 논의합니다.

루비 1.9 이후로 더 쉬운 방법이 있습니다.

yourstring.encode('ASCII')

유효하지 않은 (ASCII가 아닌) 문자에 대한 문제를 피하려면 문제를 무시할 수 있습니다.

yourstring.encode('ASCII', invalid: :replace, undef: :replace, replace: "_")
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top