Tag: 字符编码

Notepad ++只称为“ANSI”的编码,是否有人知道如何为Ruby调用它?

我有一堆.txt的Notepad ++说(在它的下拉“编码”菜单中)是“ANSI”。 它们中包含德语字符[äöüß],它在Notepad ++中显示得很好。 但是当我在File.read ‘this is a German text example.txt’时,它们并没有显示在irb中。 那么有谁知道我应该给出什么参数Encoding.default_external= ? (我假设这是解决方案,对吗?) 当’utf-8’或’cp850’ ,它会将“äöüß”中的“ANSI”文件读作“\ xE4 \ xF6 \ xFC \ xDF”… (请不要犹豫,在你的答案中提到显而易见的“明显”事物;我几乎和你一样新生,并且仍然知道这个问题就足够了。)

我可以在Ruby 1.9上设置默认字符串编码吗?

这可能听起来很小,但它让我疯了。 自上周五在Ruby 1.9上将应用程序发布到生产以来,我一直有很多与字符编码有关的小例外。 几乎所有这些都是一些变化: Encoding::CompatibilityError: incompatible character encodings: ASCII-8BIT and UTF-8 我们有一个国际用户群,所以很多名字都包含变音符号等。如果我修复模板在一堆地方使用force_encoding ,它会弹出flash消息助手。 等等。 目前看起来我已经确定了我所知道的所有内容,通过在一个地方修补ActiveSupport的字符串连接,然后在每个源文件的顶部设置#coding # encoding: utf-8 。 但是,我可能必须记住为我从现在开始的每个Ruby项目的每个文件都做到这一点的感觉,永远,只是为了避免字符串分配问题,并不适合我的胃。 我读到了关于-Ku开关的信息,但是所有内容似乎都警告说这是为了向后兼容并且可能随时消失。 所以我对1.9经验丰富的人提出的问题是:在我的每个文件中设置#encoding 真的有必要吗? 在全球范围内有合理的方法吗? 或者,更好的方法是在绕过内部/外部默认值的字符串的非文字值上设置默认编码? 在此先感谢您的任何建议。

Ruby 1.9:具有未知输入编码的正则表达式

是否有一种可接受的方法来处理Ruby 1.9中的正则表达式,其中输入的编码是未知的? 假设我的输入恰好是UTF-16编码: x = “foobarbaz” y = x.encode(‘UTF-16LE’) re = /(.*)/ x.match(re) => #<MatchData "bar” 1:”bar”> y.match(re) Encoding::CompatibilityError: incompatible encoding regexp match (US-ASCII regexp with UTF-16LE string) 我目前的方法是在内部使用UTF-8并在必要时重新编码(副本)输入: if y.methods.include?(:encode) # Ruby 1.8 compatibility if y.encoding.name != ‘UTF-8’ y = y.encode(‘UTF-8’) end end y.match(/(.*)/u) => #<MatchData "bar” 1:”bar”> 然而,这对我来说有点尴尬,我想问一下是否有更好的方法。

Ruby Regex错误:不兼容的编码regexp匹配(ASCII-8BIT regexp与UTF-8字符串)

我有两个错误,都围绕编码和两者相关。 我在启动WEBrick时遇到的第一个错误(技术上是警告): /Users/USERNAME/example/config/initializers/bb-ruby.rb:54: warning: invalid Unicode Property \P: /\:\-?\P/ 它指的是: /\:\-?\P/, 这只是一些正则表达式,最终是这个块的一部分: @@tags[‘Razzing’] = [ /\:\-?\P/, ”, ‘Razzing’, ‘:P’, :razzing] 然后,我在解析一些字符串时也会得到以下错误(可能是由于同一行)… Encoding::CompatibilityError incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string) 我正在运行Ruby 1.9.2和Rails 3.2.1。

如何在Ruby中检测字符串中的某些Unicode字符?

给定Ruby 1.8.7中的字符串(没有使用\ p {}支持Unicode属性的令人敬畏的Oniguruma正则表达式引擎),我希望能够确定该字符串是否包含一个或多个中文,日文或韩文字符; 即 class String def contains_cjk? … end end >> ‘日本語’.contains_cjk? => true >> ‘광고 프로그램’.contains_cjk? => true >> ‘艾弗森将退出篮坛’.contains_cjk? => true >> ‘Watashi ha bakana gaijin desu.’.contains_cjk? => false 我怀疑这将归结为查看字符串中的任何字符是否在Unihan CJKV Unicode块中 ,但我认为值得询问是否有人知道Ruby中的现有解决方案。

Rails v3 / Ruby 1.9.2中的字符编码问题

当我从文件中读取内容时,有时会出现此错误“ UTF-8中的无效字节序列 ”。 注意 – 只有在字符串中有一些特殊字符时才会发生这种情况。 我试过没有“r:UTF-8”打开文件,但仍然得到相同的错误。 open(file, “r:UTF-8”).each_line { |line| puts line.strip(“,”) } # line.strip generates the error 文件内容: # encoding: UTF-8 290919,”SE”,”26″,”Sk‰l”,””,59.4500,17.9500,, # this errors out 290956,”CZ”,”45″,”HornÌ Bradlo”,””,49.8000,15.7500,, # this errors out 290958,”NO”,”02″,”Svaland”,””,58.4000,8.0500,, # this works 这是我从外面获得的CSV文件,我试图将其导入我的数据库,它顶部没有“#encoding:UTF-8”,但我添加了这个,因为我在某处读到它会解决这个问题,但事实并非如此。 🙁 环境: Rails v3.0.3 ruby 1.9.2p0 (2010-08-18修订版29036)[x86_64-darwin10.5.0]

在ruby 1.9中是否有一种方法可以从字符串中删除无效的字节序列?

假设你有一个像”€foo\xA0″这样的字符串,编码为UTF-8,有没有办法从这个字符串中删除无效的字节序列? (所以你得到”€foo” ) 在ruby-1.8中你可以使用Iconv.iconv(‘UTF-8//IGNORE’, ‘UTF-8’, “€foo\xA0”)但现在已弃用。 “€foo\xA0”.encode(‘UTF-8’)没有做任何事情,因为它已经是UTF-8了。 我试过了: “€foo\xA0″.force_encoding(‘BINARY’).encode(‘UTF-8’, :undef => :replace, :replace => ”) 产量 “foo” 但这也失去了有效的多字节字符€