سؤال

ولدي النصي روبي الذي يولد ملف CSV UTF8 عن بعد في جهاز لينكس ومن ثم نقل الملف إلى جهاز ويندوز من خلال SFTP.

وبعد ذلك تحتاج إلى فتح هذا الملف مع Excel، ولكن Excel لا تحصل UTF8، لذلك أنا دائما في حاجة لفتح الملف في محرر النص أن لديها القدرة على تحويل UTF8 إلى ANSI.

وأنا أحب أن القيام بذلك برمجيا باستخدام روبي وتجنب خطوة تحويل اليدوي. ما هي أسهل طريقة للقيام بذلك؟

وPS: حاولت استخدام يكونف لكن لم يكن النجاح

هل كانت مفيدة؟

المحلول

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

وعلى افتراض أن النص الخاص بك حقا لا يصلح في مجموعة أحرف ASCII.

نصائح أخرى

وأخيرا تمكنت من القيام بذلك باستخدام يكونف، كنت مجرد العبث المعلمات. لذلك، وهذا هو كيف نفعل ذلك:


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 من المحتوى المقدم من المستخدمين على الخادم. لقد وجدت unidecoder الأحجار الكريمة التي لا وظيفة لطيفة من الترجمة الصوتية حروف يونيكود في أسكي.

مثال:

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

لدينا حالة استخدام بسيطة، وهذا يعمل بشكل جيد.

ومحورية مختبرات لديه وظيفة بلوق كبيرة على يونيكود الى أسكي مناقشة هذا بمزيد من التفاصيل.

ومنذ روبي 1.9 هناك طريقة أسهل:

yourstring.encode('ASCII')

لتجنب المشاكل مع صالح (غير ASCII) الأحرف التي يمكن تجاهل المشاكل:

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