dan*_*neu 5 ruby ruby-on-rails character-encoding ruby-on-rails-3.2
这个Iconv习惯用法将字符串转码为UTF-8并删除无法音译的字符:
require "iconv"
def normalize(text)
Iconv.new('UTF-8//IGNORE', 'UTF-8').iconv(text.dup)
end
Run Code Online (Sandbox Code Playgroud)
你怎么会为此写一个测试?
编辑:我最终简化了问题,因为我意识到尝试在Rails # encoding: utf-8spec文件中测试它的上下文使问题变得复杂.所以现在赏金有点傻但是我会奖励它,如果有人可以展示我可以解决的测试.
您可以使用#pack方法从字节数组构造字符串。这样,您可以轻松生成无效/错误的字符串并在测试中使用它。
例子:
describe "#normalize" do
it "should remove/ignore invalid characters" do
# this "string" equals "Mandados de busca do caso Megaupload considerados inv\xE1lidos - Tecnologia - Sol"
bad_string = [77, 97, 110, 100, 97, 100, 111, 115, 32, 100, 101, 32, 98, 117, 115, 99, 97, 32, 100, 111, 32, 99, 97, 115, 111, 32, 77, 101, 103, 97, 117, 112, 108, 111, 97, 100, 32, 99, 111, 110, 115, 105, 100, 101, 114, 97, 100, 111, 115, 32, 105, 110, 118, 225, 108, 105, 100, 111, 115, 32, 45, 32, 84, 101, 99, 110, 111, 108, 111, 103, 105, 97, 32, 45, 32, 83, 111, 108].pack('c*').force_encoding('UTF-8')
normalize(bad_string).should == 'Mandados de busca do caso Megaupload considerados invlidos - Tecnologia - Sol'
end
end
Run Code Online (Sandbox Code Playgroud)
(对于相当长的测试字符串,我很抱歉,我只是在代码中找不到更短的示例)
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |