Tag: 字符编码

Prawn:以PDF格式打印unicode字符串

我正在使用Prawn在Rails 3应用程序中生成PDF。 是否可以像在HTML视图中一样将Unicode字符串打印到PDF中? 例如, 在show.html.erb导致字形show.html.erb while pdf.text raw “unicode_for_ཀ” 在show.pdf.prawn中产生字符串”unicode_for_ཀ” 尝试在show.pdf.prawn : pdf.font “#{Prawn::BASEDIR}/data/fonts/TibMachUni-1.901b.ttf” do pdf.text raw “unicode_for_ཀ” end 和 pdf.font_families.update(“TibMachUni” => {:normal => “#{Prawn::BASEDIR}/data/fonts/TibMachUni-1.901b.ttf” }) pdf.font(“TibMachUni”) do pdf.text raw “unicode_for_ཀ” end 这并没有解决问题。

如何在Rails中将文本转换为unicode?

在我的数据库中,我有以下条目 id | name | info 1 John Smith Çö ¿¬¼ 正如您所知,信息列显示错误 – 但它实际上是韩语。 在Chrome中,当我将浏览器编码从UTF-8切换到韩文(我认为是’euc-kr’)时,我实际上设法查看文本: id | name | info 1 John Smith 횉철 쩔짭쩌 然后我手动将文本复制到数据库中的信息并保存,现在我可以用UTF-8查看它,而无需切换浏览器的编码。 真棒。 现在我想在Rails中完成同样的事情,而不是手动完成。 所以再次从原始条目开始,我转到控制台并输入: require ‘iconv’ u = User.find(1) info = u.info new_info = Iconv.iconv(‘euc-kr’,’UTF-8′, info) u.update_attribute(‘info’, new_info) 但是,我最终得到的是数据库中횉철 쩔짭쩌 ,而不是“ 횉철 쩔짭쩌 。 我对unicode和编码有一个非常基本的了解。 有人可以解释一下这里发生了什么,以及如何解决这个问题? 我想要的结果是我手动实现的。 谢谢!

处理不兼容的字符编码:UTF-8和ASCII-8BIT

我在生产中遇到不兼容的字符编码错误。 我尝试在本地重现它,但没有运气。 这是错误消息: A ActionView::Template::Error occurred in controller_name#action_name: incompatible character encodings: UTF-8 and ASCII-8BIT activesupport (3.0.5) lib/active_support/core_ext/string/output_safety.rb:80:in `concat’ config.encoding已在application.rb中设置为“utf-8”。 让我感到困惑的是,这个问题在乘客重启后只持续了一段时间,并在一段时间后消失。 进一步调试exception回溯给了我这个: activesupport (3.0.5) lib/active_support/core_ext/string/output_safety.rb:80:in `concat’ activesupport (3.0.5) lib/active_support/core_ext/string/output_safety.rb:80:in `concat’ actionpack (3.0.5) lib/action_view/template/handlers/erb.rb:14:in `<<' app/views/web/controller_name/action_name.erb:98 Line 98: <a href="https://stackoverflow.com/questions/20075740/dealing-with-incompatible-character-encodings-utf-8-and-ascii-8bit/” id=”xyz”> 在“ ActionView :: Template :: Error(不兼容的字符编码:UTF-8和ASCII-8BIT) ”中提到ActionDispatch::Request可能会导致问题,但我对一段时间后问题如何修复自己一无所知!

从python的str字节序列中获取unicode

我有一个旧的django应用程序,它在数据库中保存了UTF-8字符串,当我尝试在Ruby中获取它们时,它们看起来像无效的utf8。 保存之前的str在python中是str类型,但是当从数据库中获取时,django给了我一个合适的unicode字符串。 当我在rails中获取相同的记录时,我得到一个与python的str字符串相同的字节序列,而ruby抱怨它是一个无效的字节序列。 示例:测试过的字符串是一个表情符号:🔥 在保存在Django- str类型之前,序列: [237, 160, 189, 237, 180, 165] 从Django中的db获取 – unicode类型,序列[55357, 56613] 从Rails中的db获取 – 序列[237, 160, 189, 237, 180, 165] 有没有办法将Ruby中的字节序列转换为正确的utf8字符串?

Ruby 1.9 – 无效的多字节字符(utf-8)

我有一个只有这两行的ruby文件: # encoding: utf-8 puts “—” 当我用ruby test_enc.rb运行它时失败了: test_enc.rb:2: invalid multibyte char (UTF-8) test_enc.rb:2: unterminated string meets end of file 我不知道如何正确指定— (emdash)的字符代码,但是vim告诉我它是151, Hex 97, Octal 227 。 对于像ã这样的其他角色,它也会失败,所以我怀疑它与该角色有特殊关系。 我在Windows XP上运行,我使用的ruby版本是: ruby 1.9.1p430 (2010-08-16 revision 28998) [i386-mingw32] 我觉得这里有一些非常明显的东西。 有任何想法吗? 编辑:今天学到了关于假设的宝贵教训 – 特别是假设你的编辑使用UTF-8而没有实际检查它。 哎呀! 感谢所有快速准确的回复! 再次编辑: “为utf-8正确设置vim”变得太大了,并且与这个问题无关,所以它现在是一个单独的问题 。

使用Ruby上载文件字符集转换

我有一个应用程序,我们让客户上传一个csv文件到我们的服务器。 然后我们处理并将来自csv的数据放入我们的数据库中。 我们遇到了一些char-sets的问题,特别是当我们处理JSON时,特别是一些非转换的UTF-8字符在JSON响应上打破了IE。 有没有办法在我们开始处理之前将上传的csv文件转换为UTF-8? 有没有办法确定上传文件的字符编码? 我玩过iconv但我们并不总是确定上传文件的编码方式。 谢谢。

为什么Rails中的默认编码不是UTF-8?

当我在控制器中使用UTF-8字符(大部分时间是土耳其字符)时,我必须在每个控制器文件的顶部添加#encoding: utf-8 。 为什么Rails不将此作为默认值? 编辑:我已经知道它不是关于Rails,而是关于Ruby。

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。

删除ruby中的奇怪无效字符

我有一些XML内容(UTF-8),其中包含无效字符(当我尝试用Nokogiri::XML(content)解析内容时Line 2190, SyntaxError: PCDATA invalid Char value 15 nokogiri告诉我Line 2190, SyntaxError: PCDATA invalid Char value 15 )。 该字符在Sublime Text编辑器中显示为“SI”: 当我尝试复制角色时,没有任何东西被复制,所以我甚至无法查找它。 当我在Atom编辑器中打开它时,不显示“SI”。 但是,当我使用右键单步执行字符时,我必须键入两次以覆盖放置“SI”字符的位置。 首先,这是什么角色? 第二:在Ruby中有没有办法删除这些字符。 我试着用content.chars.select{|i| i.valid_encoding?}.join content.chars.select{|i| i.valid_encoding?}.join但它不会删除该字符。 更新 我通过用ruby读取原始文件找到了这个角色。 字符是\u000F和”\u000F”.ord返回字符代码15 。 关于http://www.fileformat.info/info/unicode/char/000f/index.htm,这是一个SHIFT IN字符。 还有其他类似的人物吗? 我可以使用str.split(“\u000F”).join来删除它们,但如果还有其他这样的字符,这似乎不是一个好方法。 有任何想法吗?

Ruby 1.9 Base64编码写入文件错误

我收到以下错误: Encoding::UndefinedConversionError: “\x81” from ASCII-8BIT to UTF-8 以下都在Ruby 1.8.7中工作,所以我认为这与Ruby 1.9如何处理编码有关,但我不太清楚如何解决它。 我目前正在使用Ruby 1.9.3。 decode_base64_content = Base64.decode64(content) File.open(“index.txt”, “w”) do |f| f.write(decode_base64_content) end 内容如下: CgcZAAEAAABQcmVzZW50YXRpb24RMQAGSUIyQjdCNjBCLUZBRTMtMjVGMS1DQ0E1LTM1REM4NjBC MDlCRgYCBklBMjk2OTQ4MC0yMkQyLURENzMtQUY5Ni1DNURDMDIyQTVFRjkGBAZJNUJCRTI3REYt Q0QyRC03NkY0LTk1MUMtQzYxRkYxQjgxN0Y4BgYGSTg0QjM3M0FGLTVFNjEtMkMwMy1DMTBCLUNB MUZCMDY0Q0NERQYIBkkwOTIwNDRBRC02QTQ5LTg0NzEtMzc5QS0yRjQxMzU2MUY0OUQGCgZJODlC NDczOTUtOTk1MS01OTk1LTk4NDctNkU1NjI4RjhGNjYzBgwGSThCQ0RFM0VDLUMyREItMDkyNy1G NTFFLTJGNDE4OEMzNURDMwYOBklGMDk5QkRDOC1GOEFDLTg1QjEtMjgzMC0yRjQ5RkZFMDFCNUEG EAZJNTJCOEQ3RUItMzZEQi1CMjNELUU2MTYtMkY0QjUxNDIwMjBFBhIGSUM2RjkzNjgwLTFBNjMt NzU5Qi0yOEE5LTUwMDc2NjZCOEYyNgYUBkk2MDIwRjg4Ni1BQTk4LTRBNDQtQjZGNS1DNDAyMTMz NzEzOEQGFgZJRDFEMjcxMzYtQTkwQy0xRDBBLTc4RjAtQ0ExRUFCQzgzRUE1BhgGSUZBRDQzMjI1 LTUwODctNENEMy1ENjkzLUQ4Qzg0NDc3RTMyRAYaBklFMjc5NjA5Mi0xNUYzLUY4NkItMEFBQi0x MUEzQjIwNEFBRTIGHAZJNERFNEYzNUItQzAyNy1DOTQ1LTY2MzUtMDE4NTZDRTdBMDM3Bh4GSUM4 NjA4RkI4LUI4RDEtMjM5RS04ODY4LUNBMjIzNUUwNjk5MAYgBkk4QjcxOEFDRi03NEE0LTA4REQt QzZENC1DQTEyNDQwRTkzOUYGIgZJQjA3NTk0OEMtQzA3MS0wQTQ3LTYxNDQtNEU1OUIwN0QwQ0VF BiQGSUM2M0VFQkU1LUZFOEEtRUVDMC1GNDFFLTc3QTI3Qzg2RDE1OAYmBkk5QkQ2M0NEQi02NDg2 LTM2OUQtMTY0NS0xMDIzMTQ5Njk1OUQGKAZJOTI3NDUzNDEtRUYzRC04MEU1LUZDQkUtQ0EyMTZG Q0FGRTcyBioGSUI3MzlFMTBFLTk2M0QtMDA0Ny1EMkU1LUNBMjA2ODM2MjZFNgYsBkk4RUY5QkZB Ni0wNDAyLTQwQUQtRjAxQi0xMTRBNDBFODMwRjMGLgZJQjY2N0YxODktNzQ4My05RkE4LTYwMDkt 持续约3000行。 如何解决此转换错误? 上面的代码段工作但在3000行的某处,我认为base64解码方法使用无效编码。 谢谢!