Tag: 编码

如何删除ruby中不可打印/不可见的字符?

有时我在字符串中间有邪恶的不可打印字符。 这些字符串是用户输入,所以我必须让我的程序接收它,而不是尝试更改问题的来源。 例如,它们可以在字符串的中间具有零宽度的无中断空间 。 例如,在解析.po文件时,一个有问题的部分是文件中间的字符串”he is a man of god” 。 虽然一切看似正确,但用irb显示检查: “he is a man of god”.codepoints => [104, 101, 32, 105, 115, 32, 97, 32, 65279, 109, 97, 110, 32, 111, 102, 32, 103, 111, 100] 我相信我知道BOM是什么,我甚至可以很好地处理它。 但是有时我在文件的中间有这样的字符,因此它不是BOM 。 我目前的做法是以一种非常臭的方式删除所有我发现邪恶的角色: text = (text.codepoints – CODEPOINTS_BlACKLIST).pack(“U*”) 我得到的最接近的是这篇post ,它引导我:print: regexp上的选项。 然而这对我没有好处: “m”.scan(/[[:print:]]/).join.codepoints => [65279, 109] […]

无法在Ruby 1.9.3 IRB中输入变音符号

我在使用Mac OS 10.7.3的Ruby 1.9.3的IRB中遇到了非常奇怪的行为当我尝试进入变音符号时,它在提示符中被转义并且看起来像这样(我在键盘上输入”ü” ) irb(main):001:0> “\U+FFC3\U+FFBC” 这有点奇怪: irb(main):001:0> “\U+FFC3\U+FFBC”.length => 0 当然,角色也不会显示: irb(main):001:0> “\U+FFC3\U+FFBC” => “” 有谁知道这里发生了什么或如何解决这个问题?

续集永远不会返回utf-8,只是ascii-8bit

我正在尝试连接到这个mysql数据库。 DataMapper以UTF-8很好地获取所有内容,但Sequel总是返回ASCII-8bit中的字符串,这会产生.to_json的错误。 为了让它发挥作用,我尝试了几件事。 Encoding.default_external = Encoding::UTF_8 Encoding.default_internal = Encoding::UTF_8 DB.run ‘set names utf8’ Sequel.mysql ‘db’, (…), :encoding => ‘utf-8’ 我有gem:mysql(2.9.0)(试过没有),mysql2(0.3.11)和续集(3.42.0) 唯一有效的方法是手动强制编码每个字符串,这个字符串比理想情况要差很多。

如何使用ruby 1.9转换字​​符编码

我目前在亚马逊api的结果方面遇到麻烦。 该服务返回一个带有unicode字符的字符串: 在Mac上学习Objective \ xE2 \ x80 \ x93C(学习系列) 使用ruby 1.9.1,甚至无法处理字符串: REXML::ParseException: # … Exception parsing Line: 1 Position: 1636 Last 80 unconsumed characters: Learn Objective–C on the Mac (Learn Series)

为什么不decodeURI(“a + b”)==“a b”?

我正在尝试在Ruby中编码URL并使用Javascript解码它们。 然而,正字符给我奇怪的行为。 在Ruby中: [Dev]> CGI.escape “ab” => “a+b” [Dev]> CGI.unescape “a+b” => “ab” 到现在为止还挺好。 但是Javascript怎么样? >>> encodeURI(“ab”) “a%20b” >>> decodeURI(“a+b”) “a+b” 基本上我需要一种编码/解码URL的方法,它们在Javascript和Ruby中的工作方式相同。 编辑: decodeURIComponent不是更好: >>> encodeURIComponent(“ab”) “a%20b” >>> decodeURIComponent(“a+b”) “a+b”

如何处理数据以避免MySQL“错误的字符串值”错误?

我正在尝试使用Rake任务将一些遗留数据从MS Access迁移到MySQL。 我正在使用Ruby 1.8.6开发Windows XP。 我将Rails的编码设置为database.yml “utf8”。 此外,MySQL的默认字符集是utf8。 99%的数据都很好,但是我偶尔会得到一个列值,它会给我一个像这样的错误: Mysql::Error: Incorrect string value: ‘\x92 Comm…’ for column ‘name’ at row 1: INSERT INTO `organizations` ( […] ) VALUES(‘Lawyers’ Committee’, […] ) 看起来给MySQL带来麻烦的事情就是“律师”一词中的“s”之后的撇号。 这是另一个…… Mysql::Error: Incorrect string value: ‘\x99 aoc’ for column ‘department’ at row 1: INSERT INTO `addresses` […] ‘TRInfo™ aoc’ [….] 看起来它在“TRInfo”之后对“TM”感到窒息。 是否有任何Ruby或Rails方法可以运行数据来清除MySQL将要阻塞的任何字符? 理想情况下,用更可口的字符替换它们会很棒 […]

Ruby转换字符串编码从ISO-8859-1到UTF-8不起作用

我试图将一个字符串从ISO-8859-1编码转换为UTF-8,但我似乎无法让它工作。 这是我在irb中所做的一个例子。 irb(main):050:0> string = ‘Norrlandsvägen’ => “Norrlandsvägen” irb(main):051:0> string.force_encoding(‘iso-8859-1’) => “Norrlandsv\xC3\xA4gen” irb(main):052:0> string = string.encode(‘utf-8’) => “Norrlandsvägen” 我不确定为什么iso-8859-1中的Norrlandsvägen将在utf-8中转换为Norrlandsvägen 。 我已经尝试过编码,编码!,编码(destinationEncoding,originalEncoding),iconv,force_encoding,以及我能想到的各种奇怪的解决方法,但似乎没有任何效果。 有人可以帮助我/指出我正确的方向吗? Ruby新手仍然像疯了一样拉头发,但感谢所有回复… 🙂 这个问题的背景:我正在编写一个gem,它将从一些网站下载一个xml文件(将具有iso-8859-1编码)并将其保存在存储中,我想先将其转换为utf-8。 但像Norrlandsvägen这样的词语让我感到困惑 。 真的任何帮助将不胜感激! [更新]:我意识到在irb控制台中运行这样的测试可能会给我不同的行为,所以这里是我在实际代码中的内容: def convert_encoding(string, originalEncoding) puts “#{string.encoding}” # ASCII-8BIT string.encode(originalEncoding) puts “#{string.encoding}” # still ASCII-8BIT string.encode!(‘utf-8’) end 但最后一行给出了以下错误: Encoding::UndefinedConversionError – “\xC3” from ASCII-8BIT to UTF-8 感谢\xC3在下面的回答,我注意到如果你运行的话, \xC3实际上会显示在irb中: irb(main):001:0> […]

编码:: UndefinedConversionError:“\ xE4”从ASCII-8BIT到UTF-8

我试图用Net::HTTP获取这个CSV文件 。 File.open(file, “w:UTF-8”) do |f| content = Net::HTTP.get_response(URI.parse(url)).body f.write(content) end 再次读取我的本地csv文件后,我得到了一些奇怪的输出。 Nationalit \ xE4t;改0-5 我试图将其编码为UTF-8,但是Encoding::UndefinedConversionError: “\xE4” from ASCII-8BIT to UTF-8收到错误Encoding::UndefinedConversionError: “\xE4” from ASCII-8BIT to UTF-8 rchardet gem告诉我内容是ISO-8859-2 。 但转换为UTF-8将无法正常工作。 在正常的Texteditor中打开后,我看到它是正常编码的。

如何在JavaScript和Ruby中对原始URL进行编码/解码以获得相同的值?

我正在开发一个Web应用程序,我必须在JavaScript端编码和解码字符串以及代码的Ruby后端。 唯一的问题是JavaScript和Ruby的转义方法有很小的区别。 在JavaScript中, ” “被视为”%20″但在ruby中, ” “被编码为”+” 。 有办法解决这个问题吗? 在原始URL编码中编码字符串的另一种Ruby方法? 经过一些Selenium测试后,我注意到由于某种原因, URI.unescape在”£”和”?”之间URI.unescape了 。 如果我使用encodeURIComponent(“£”); 在JavaScript中,然后是URI.unescape(“%C2%A3″) ,这是我们编码”£”符号时得到的值,我得到”?” 签收了。 有解决方案吗

将UTF-8设置为Ruby 1.9.3的默认值

我在Rails 4和Ruby 1.9.3上 我经常使用“奇怪”字符,所以我必须在所有.rb文件的顶部声明UTF-8编码。 有没有办法将UTF-8设置为Ruby 1.9.3的默认编码? 我尝试了所有答案,但是当运行rake db:seed并创建一个属性包含非US-ASCII有效字符的对象时,我仍然收到此错误: `block in trace_on’: invalid byte sequence in US-ASCII (ArgumentError)