multibyte char ไม่ถูกต้อง (US-ASCII) พร้อม Rails และ Ruby 1.9


197

ฉันใช้ Ruby 1.9.1 ร่วมกับ Rails 2.3.4 แอปพลิเคชันของฉันคือจัดการกับการป้อนข้อความ

ถ้าฉันลองทำสิ่งที่ชอบ (เครื่องหมายอัญประกาศด้านในดูต่างออกไป)

text = "”“"

ฉันได้รับข้อผิดพลาดต่อไปนี้:

#<SyntaxError: /Users/tammam56/rubydev/favquote/lib/daemons/twitter_quotes_fetch.rb:54: invalid multibyte char (US-ASCII)
/Users/tammam56/rubydev/favquote/lib/daemons/twitter_quotes_fetch.rb:54: invalid multibyte char (US-ASCII)
/Users/tammam56/rubydev/favquote/lib/daemons/twitter_quotes_fetch.rb:54: syntax error, unexpected $end, expecting keyword_end

ฉันต้องใช้เครื่องหมายอัญประกาศเหล่านั้นเนื่องจากผู้ใช้อาจป้อนข้อมูลเหล่านั้นและฉันต้องทำบัญชีนั้น

ความคิดใด ๆ


หากรหัสของคุณไม่มี backticks ใด ๆ อยู่ แต่คุณถูก "กล่าวหา" ในการใช้ backticks อาจมีปัญหาระยะห่าง / แท็บ / การขึ้นบรรทัดใหม่ที่แปลกในไฟล์ของคุณ ลองโพสต์ลงใน StackOverflow ให้เป็นค่าว่างตัวอย่างเช่น SO จะเริ่มทำตัวแปลก ๆ ลบช่องว่างที่แปลกและแท็บและการขึ้นบรรทัดใหม่ อีกครั้งเพียงวางรหัสลงในช่องว่าง SO และพยายามจัดรูปแบบรหัสของคุณสำหรับงานนำเสนอเป็นวิธีหนึ่งที่จะให้คำแนะนำแก่คุณ
boulder_ruby

คำตอบ:


691

คุณได้ลองเพิ่มความคิดเห็นเวทมนต์ในสคริปต์ที่คุณใช้ตัวอักษรที่ไม่ใช่ ASCII หรือไม่? มันควรจะอยู่ด้านบนของสคริปต์

#!/bin/env ruby
# encoding: utf-8

มันใช้งานได้สำหรับฉันเหมือนมีเสน่ห์


2
อืม ......... เพิ่มที่ด้านบนของไฟล์ แต่ยังคงได้รับข้อความข้อผิดพลาดเดียวกัน ข้อเสนอแนะใด ๆ
Artem Kalinchuk

8
คำอธิบายส่วนกลางสามารถพบได้ในบทความ @dalyons ที่เชื่อมโยง: ไฟล์ต้นฉบับได้รับการเข้ารหัส US-ASCII เว้นแต่คุณจะพูดเป็นอย่างอื่น หากคุณวางเนื้อหาที่ไม่ใช่ ASCII ลงในตัวอักษร String โดยไม่ต้องเปลี่ยนการเข้ารหัสต้นฉบับ Ruby จะตายด้วยข้อผิดพลาดนั้น ขอบคุณพวกฉันในที่สุดฉันก็รับมัน :-)
เบส -t

2
#!/bin/env rubyไม่จำเป็นเว้นแต่คุณจะเรียกใช้สคริปต์จากบรรทัดคำสั่งเป็นไฟล์เรียกทำงาน # encodingบรรทัดทำงานด้วยตัวเอง
gak

10
# encoding: utf-8. ปลายปี 2013 และเรายังคงต้องเล่นเกมนี้ รอสายโทรศัพท์ ... มันเป็นปี 2033 พวกเขาโทรมาบอกว่าพวกเขายังเล่นอยู่ โอ้ดีขอบคุณที่เตือนฉัน Jarek Zmudzinski จากปี 2010
thomax

1
@gotqn - กรุณาค้นหาบทความเดียวกันที่นี่ - graysoftinc.com/character-encodings/…
Alok Swain

43

หากคุณต้องการเพิ่มความคิดเห็นมายากลในไฟล์ต้นฉบับทั้งหมดของโครงการได้อย่างง่ายดายคุณสามารถใช้magic_encodingอัญมณี

sudo gem install magic_encoding

จากนั้นเพียงโทรหาmagic_encodingเทอร์มินัลจากรูทของแอปของคุณ


ฉันคิดว่ามันสำคัญที่ต้องจำรายละเอียดแบบนี้ดังนั้นฉันจะไม่ใช้อัญมณีนั้นเป็นเวลาอย่างน้อยสองสามเดือนในการเขียนการเข้ารหัส #: utf-8 ด้วยตนเอง
Marcel Valdez Orozco

การเพิ่ม 'gem magic_encoding' ให้กับ gemfile บนราง 2.3 และ ruby ​​1.9 ช่วยแล้ว
Elmor

สิ่งนี้ไม่ได้รวมเข้ากับการทดสอบแตงกวา
เดินทาง

1
@Elmor คุณไม่ควรนำไลบรารี่ภายนอกเข้าสู่ Gemfile ของโปรเจ็กต์แบบนั้น magic_encodingเป็นเพียงเครื่องมือบรรทัดคำสั่งไม่ใช่การพึ่งพาโครงการ
Nowaker

17

ฉันแค่ต้องการเพิ่มวิธีแก้ปัญหาของฉัน:

ฉันใช้ภาษาเยอรมัน umlauts เช่นö, ü, äและได้รับข้อผิดพลาดเดียวกัน
@ Jarek Zmudzinski เพิ่งบอกคุณว่ามันทำงานอย่างไร แต่นี่เป็นของฉัน:

เพิ่มรหัสนี้ไปด้านบนของตัวควบคุมของคุณ: # encoding: UTF-8
(ตัวอย่างเช่นการใช้ข้อความแฟลชด้วย umlauts)

ตัวอย่างของคอนโทรลเลอร์ของฉัน:

# encoding: UTF-8
class UserController < ApplicationController

ตอนนี้คุณสามารถใช้ö, ä, ü, ß, "" ฯลฯ


8

เครื่องหมายคำพูดคู่ที่เอียงเหล่านั้นไม่ใช่อักขระ ASCII ข้อความแสดงข้อผิดพลาดทำให้เข้าใจผิดว่าเป็น 'หลายไบต์'


2
ทำไมมันทำให้เข้าใจผิด? พวกเขามีตัวอักษรสัญลักษณ์
Matthew Scharley

4
เนื่องจาก ASCII ไม่ได้กำหนดการเข้ารหัสหลายไบต์ สำหรับ ASCII นั้นมีความเกี่ยวข้องกันซึ่งเป็นการพูดพล่อยๆที่เกิดขึ้นว่าถูกต้องในการเข้ารหัสที่เกี่ยวข้อง
Phil Miller

8

เพียงแค่ทราบว่าเป็นของทับทิม 2.0 # encoding: utf-8ไม่มีความจำเป็นที่จะเพิ่ม ตรวจพบ UTF-8 โดยอัตโนมัติ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.