Pertanyaan Bagaimana saya bisa menghindari menempatkan komentar penyandian ajaib di atas setiap file UTF-8 di Ruby 1.9?


Saya memiliki proyek Rails dengan banyak string Cyrillic di dalamnya.

Ini bekerja dengan baik pada Ruby 1.8, tetapi Ruby 1.9 menganggap file sumber dikodekan AS-ASCII kecuali jika Anda menyediakan # encoding: utf-8 komentar di bagian atas file sumber. Pada saat itu file tidak dipertimbangkan US-ASCII.

Apakah ada cara yang lebih sederhana untuk memberi tahu Ruby "Aplikasi ini dikodekan UTF8. Harap pertimbangkan semua dan semua file sumber yang disertakan sebagai UTF8 kecuali dinyatakan sebaliknya"?


MEMPERBARUI:

Saya menulis "Cara menyisipkan pengkodean: direktif UTF-8 secara otomatis di file Ruby 1.9"Yang menambahkan direktif pengkodean secara otomatis jika diperlukan.


32
2017-07-20 14:29


asal


Jawaban:


Eksplisit lebih baik daripada implisit. Menuliskan nama pengkodean baik untuk editor teks Anda, penerjemah Anda, dan siapa pun yang ingin melihat file tersebut. Platform yang berbeda memiliki standar yang berbeda - UTF-8, Windows-1252, Windows-1251, dll. - dan Anda akan menghambat portabilitas atau integrasi platform jika Anda secara otomatis memilih salah satu dari yang lain. Memerlukan pengkodean yang lebih eksplisit adalah Hal yang Baik.

Ini mungkin ide yang baik untuk mengintegrasikan aplikasi Rails Anda dengan GetText. Kemudian semua string UTF-8 Anda akan diisolasi ke sejumlah kecil file terjemahan, dan modul Ruby Anda akan bersih ASCII.


5
2017-07-20 14:34



Saya pikir Anda juga bisa

  1. menggunakan -E utf-8 argumen baris perintah untuk ruby, atau
  2. mengatur Anda RUBYOPT variabel lingkungan ke "-E utf-8"

13
2017-07-20 15:35



Menurut pendapat saya, eksplisit tidak selalu lebih baik daripada implisit.

Ketika hampir semua sumber yang Anda gunakan kompatibel dengan UTF-8, Anda dapat dengan mudah menghindari menempatkan komentar penyandian ajaib dengan menggunakan Ruby -Ku opsi baris perintah.

Jangan bingung "umsgstr "parameter dari -K pilihan dengan -U pilihan.

-Ku : set internal and script encoding to utf-8
-U  : set internal encoding to utf-8

Kemudian, atur komentar penyandian ajaib hanya dalam skrip yang membutuhkannya. Ingat, konvensi over konfigurasi!

Anda dapat mengatur variabel lingkungan RUBYOPT=-Ku

Lihat opsi baris perintah Ruby di http://www.manpagez.com/man/1/ruby/.


12
2018-01-20 15:09



Ada permata yang mengatur komentar ajaib di atas pada setiap file yang membutuhkannya dalam proyek Rails: https://github.com/m-ryan/magic_encoding

Anda cukup menginstal dan menjalankannya magic_encoding di akar proyek Anda, masalah terpecahkan.


4
2018-06-17 13:41



Bukan jawaban langsung, tetapi tergantung pada lingkungan pengkodean Anda, Anda dapat membiarkan editor mengurus berbagai hal. Emacs ' ruby-mode misalnya memiliki variabel ruby-insert-encoding-magic-comment:

ruby-insert-encoding-magic-comment adalah   variabel yang didefinisikan dalam `ruby-mode.el '   Nilainya adalah t

Dokumentasi:   * Masukkan komentar 'pengkodean' emak sihir saat disimpan jika ini bukan nol.

Anda dapat menyesuaikan variabel ini.

Saya yakin ada sesuatu yang mirip untuk editor lain. Tentu, itu masih berarti menambahkan komentar ajaib ke setiap file, tetapi setidaknya editor melakukannya untuk Anda secara otomatis, bukan Anda harus ingat.


3
2018-05-18 11:19



Satu-satunya cara yang sangat mudah (dan KERING!) 1.9 untuk memastikan bahwa semua file Anda (sumber dan aset) dimuat dengan pengkodean pilihan Anda pada saat run-time adalah dengan menggunakan argumen baris perintah -E.

Semua pendekatan lain memiliki kelemahan bergantung pada sistem Anda (misalnya tidak mungkin untuk mengatur ENV vars, kode pihak ketiga yang dimuat pertama kali membuat tidak cocok untuk digunakan Encoding.default_external, ...).

Server produksi saya menggunakan skrip wrapper berikut:

#!/bin/bash
exec /usr/local/rvm/rubies/default/bin/ruby -E utf-8:utf-8 "$@"

(pastikan untuk menyesuaikan jalur)


1
2018-05-18 10:41



Saya tidak lari ke sebanyak ini, tetapi ketika saya harus memastikan UTF-8, saya menggunakan $ KCODE global. Coba letakkan ini di environment.rb Anda: $KCODE = 'UTF8'

Juga, apakah Anda yakin bahwa editor Anda menyimpan file dalam UTF-8?


0
2017-07-20 14:46