Tag: utf 8

Rails + Ruby 1.9“US-ASCII中的无效字节序列”

升级到ruby 1.9后,我们开始注意到当用户使用非ASCII字符时,无法从rails模板渲染器渲染页面。 特别是“é”。 我能够在其中一台登台服务器上解决此问题,但我无法在我们的生产服务器上重现该修复程序。 似乎第一次工作的修复: 使用此处提供的convert_charset工具将数据库从latin1转换为utf8: http ://www.mysqlperformanceblog.com/2009/03/17/converting-character-sets/。 (包括在my.cnf中设置default_character_set=utf8并运行SET GLOBAL character_set_server=utf8 切换到sam-mysql-ruby适配器(而不是标准的mysql适配器: http : //gemcutter.org/gems/sam-mysql-ruby ) 重启导轨 错误是: “invalid byte sequence in US-ASCII”奇怪的是,按照上述步骤操作后,我们的生产服务器上的错误没有改变。 设置encoding: utf8 database.yml中的encoding: utf8也不会更改错误。 以下代码行引发的错误: 这个博客似乎提出了一个解决方案,但它提到这应该不是1.9中的问题: http : //www.igvita.com/2007/04/11/secure-utf-8-input-in-rails/ (它超过2岁)。 我想这个问题可能会很快影响很多人,因为更多的rails开发人员转向1.9。

显示用户输入的ASCII-8BIT字符时出现“不兼容的字符编码:UTF-8和ASCII-8BIT”错误

用户将文本保存在带有“café”字样的表单中(注意“é”)。 当加载显示此文本的#show页面时,我得到一个带有消息incompatible character encodings: UTF-8 and ASCII-8BIT的Encoding::CompatibilityError错误incompatible character encodings: UTF-8 and ASCII-8BIT 。 错误可以在控制台中重复: > r = Report.find(123) # load the record > r.update(:comments => “café”) => true > r.comments => “caf\xC3\xA9” > r.comments.encoding => # > r.comments.encode(“UTF-8”) Encoding::UndefinedConversionError: “\xC3” from ASCII-8BIT to UTF-8 from (irb):11:in `encode’ 在#show页面上显示该字段( )会产生错误。 由于数据库列编码设置为UTF-8,并且许多应用程序配置将编码定义为“UTF-8”,因此编码不是UTF-8,而是ASCII-8BIT,似乎是错误的。 理想情况下,“é”以其输入的方式显示而没有任何错误,但在这一点上,我只会采取一种方法来避免错误。 似乎我的所有forms(几十个)都容易受此影响。 有没有办法允许显示ASCII-8BIT字符? 强制编码( )会产生所需的结果,避免错误并正确显示字符,从而导致以下解决方法: […]

添加反斜杠以修复ruby字符串中的字符编码

我确信这很容易,但我会被所有这些反斜杠打结。 我有一些数据,我正在网站上(礼貌地)。 偶尔会有一句话看起来像这样: u00a362 000? you must be joking 当然应该是’£2 000? 你一定是在开玩笑’。 irb的一个简短测试破译了它。 ruby-1.9.2-p180 :001 > string = “u00a3” => “u00a3” ruby-1.9.2-p180 :002 > string = “\u00a3” => “£” 当然:添加一个反斜杠,它将被解码。 我在这个问题的帮助下创建了以下内容: puts str.gsub(‘u00’, ‘\\u00’) 这导致了\u00a3输出。 这一切都很好,但我希望它在字符串本身是£。 只是说它是不够的。 做gsub(‘u00a3’, ‘£’)并不好gsub(‘u00a3’, ‘£’)因为毫无疑问我会缺少其他角色。 谢谢你的帮助。

为什么从ASCII-8BIT到UTF-8会出现字符串编码问题“\ xE2”?

我正在尝试从电子邮件下载PDF并将内容写入文件。 出于某种原因,我收到此错误: An Encoding::UndefinedConversionError occurred in attachments#inbound: “\xE2” from ASCII-8BIT to UTF-8 app/controllers/api/attachments_controller.rb:70:in `write’ 这是我的代码: def inbound if Rails.env.production? or Rails.env.staging? email = Postmark::Mitt.new(request.body.read) else email = Postmark::Mitt.new(File.binread “#{Rails.root}/app/temp_pdfs/email.json”) end if email.attachments.count == 0 # notify aidin that we got an inbound email with no attachments respond_to do |format| format.json { head :no_content } end […]

mysql2 gem 0.3.15给出ASCII-8BIT,编码设置为“utf8”

我使用MySQL 5.1.71和Rails 4.0.4在Ruby 2.0.0-p353上运行(通过rbenv + ruby​​-build),使用mysql2 gem 0.3.15。 CentOS 6.5。 在database.yml中,编码设置为“utf8”,适配器为“mysql2”,适用于所有环境。 我的表都使用UTF-8,“DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci”。 在Ruby中, Encoding::default_internal == Encoding::default_external == Encoding::UTF_8 。 关于ActiveRecord为什么还给我ASCII-8BIT字符串的原因,我还能看到其他任何想法? 我在Mac上开发了UTF-8,但在Linux上生产的是ASCII-8BIT。 当我启动一个控制台并直接使用mysql2时,我得到了ASCII,所以这似乎是问题所在。 mysql> SHOW VARIABLES LIKE ‘character_set%’; +————————–+—————————-+ | Variable_name | Value | +————————–+—————————-+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | […]

Ruby 1.9.x用字符串中的特定清理字符替换字符集

我正在寻找一种方法,以简洁有效的方式在Ruby中执行以下PHP代码: $normalizeChars = array(‘Š’=>’S’, ‘š’=>’s’, ‘Ð’=>’Dj’,’Ž’=>’Z’, ‘ž’=>’z’, ‘À’=>’A’, ‘Á’=>’A’, ‘Â’=>’A’, ‘Ã’=>’A’, ‘Ä’=>’A’, ‘Å’=>’A’, ‘Æ’=>’A’, ‘Ç’=>’C’, ‘È’=>’E’, ‘É’=>’E’, ‘Ê’=>’E’, ‘Ë’=>’E’, ‘Ì’=>’I’, ‘Í’=>’I’, ‘Î’=>’I’, ‘Ï’=>’I’, ‘Ñ’=>’N’, ‘Ò’=>’O’, ‘Ó’=>’O’, ‘Ô’=>’O’, ‘Õ’=>’O’, ‘Ö’=>’O’, ‘Ø’=>’O’, ‘Ù’=>’U’, ‘Ú’=>’U’, ‘Û’=>’U’, ‘Ü’=>’U’, ‘Ý’=>’Y’, ‘Þ’=>’B’, ‘ß’=>’Ss’,’à’=>’a’, ‘á’=>’a’, ‘â’=>’a’, ‘ã’=>’a’, ‘ä’=>’a’, ‘å’=>’a’, ‘æ’=>’a’, ‘ç’=>’c’, ‘è’=>’e’, ‘é’=>’e’, ‘ê’=>’e’, ‘ë’=>’e’, ‘ì’=>’i’, ‘í’=>’i’, ‘î’=>’i’, ‘ï’=>’i’, ‘ð’=>’o’, ‘ñ’=>’n’, ‘ò’=>’o’, […]

UTF-8中的字节序列无效(ArgumentError)

我正在尝试运行Ruby脚本,并且总是在这一行上出错: file_content.gsub(/dr/i,’med’) 我试图用“med”代替“dr”。 错误是: program.rb:4:in `gsub’: invalid byte sequence in UTF-8 (ArgumentError) 为什么,我该如何解决这个问题呢? 我正在使用Ruby 2.2.1p85开发MAC OS X Yosemite机器。

如何在Ruby中将BOM标记写入文件

我有一些带拐杖的工作代码,可以将BOM标记添加到新文件中。 #writing File.open name, ‘w’, 0644 do |file| file.write “\uFEFF” file.write @data end #reading File.open name, ‘r:bom|utf-8’ do |file| file.read end 有没有办法自动添加标记而不在数据之前写出神秘的”\uFEFF” ? 像File.open name, ‘w:bom’ # this mode has no effect可能File.open name, ‘w:bom’ # this mode has no effect ?

Ruby to_yaml utf8字符串

如何使用ruby to_yaml方法存储带有原始符号的utf8字符串而不是转义序列?

在Ruby 1.9.X中等效的Iconv.conv(“UTF-8 // IGNORE”,…)?

我正在从远程源读取数据,偶尔会在另一个编码中获得一些字符。 它们并不重要。 我想获得一个“最佳猜测”utf-8字符串,并忽略无效数据。 主要目标是获取我可以使用的字符串,而不是遇到如下错误: 编码:: UndefinedConversionError:从ASCII-8BIT到UTF-8的“\ xFF”: utf-8中的字节序列无效