解决在ruby中使用xmlrpc出现的“UTF-8 regexp with ASCII-8BIT string”的问题

在使用以下代码ruby来操作wordpress的xml-rpc api的时候会出现问题。

啥都不说直接上代码

main.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
# encoding: utf-8

require "xmlrpc/client"
require "YAML"

xml_rpc_url = "http://www.your_wordpress_url.com/wordpress/xmlrpc.php"
username = "_username"
password = "_password"
wordpress = XMLRPC::Client.new2(xml_rpc_url)

result = server.call("wp.getUsersBlogs", username, password)

puts YAML::dump(result)

控制台输出的是

D:/Ruby192/lib/ruby/1.9.1/rexml/parsers/baseparser.rb:441:in `rescue in pull': #<Encoding::CompatibilityError: incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string)> (REXML::ParseException)
D:/Ruby192/lib/ruby/1.9.1/rexml/source.rb:212:in `match'
D:/Ruby192/lib/ruby/1.9.1/rexml/source.rb:212:in `match'
D:/Ruby192/lib/ruby/1.9.1/rexml/parsers/baseparser.rb:425:in `pull'
D:/Ruby192/lib/ruby/1.9.1/rexml/parsers/streamparser.rb:16:in `parse'
D:/Ruby192/lib/ruby/1.9.1/rexml/document.rb:204:in `parse_stream'
D:/Ruby192/lib/ruby/1.9.1/xmlrpc/parser.rb:717:in `parse'
D:/Ruby192/lib/ruby/1.9.1/xmlrpc/parser.rb:460:in `parseMethodResponse'
D:/Ruby192/lib/ruby/1.9.1/xmlrpc/client.rb:421:in `call2'
D:/Ruby192/lib/ruby/1.9.1/xmlrpc/client.rb:410:in `call'

一看到第一句就知道又碰到了文字编码的问题。通过不停的google知道这是rexmlFile.open文件的时候没指定文件的编码造成的,即使你使用了# encoding: utf-8也不好用。

然后在这里看到了这段代码,把它给复制到该ruby文件里面一切就给解决了。Done