Importing XML file in Rails app, UTF-16 encoding problem我正在尝试通过Ruby on Rails应用程序中的网页导入XML文件,代码ruby视图代码如下(我删除了HTML布局标签以使阅读代码更容易)
以下HTML形式的结果
" fmfiles_controller"中的Form_Import_DDR方法是使用REXML读取XML文档的艰苦工作的代码。代码如下
并且它继续读取所有不同的XML元素。 我在Mac OS X 10.5.4上的开发环境,同一台计算机上的站点数据库和浏览器中使用Rails 2.1.0和Mongrel 1.1.5。 我的问题是这个。读取字符编码为UTF-8的XML文档时,整个过程运行良好,但是当XML文件为UTF-16时,该过程失败,有人知道为什么会发生这种情况以及如何将其停止吗? 我在下面包括了调试器控制台的错误输出,大约需要5分钟才能得到此输出,并且浏览器在以下输出之前显示超时,并显示"无法打开页面"
听起来可能不是您的XML文件或REXML处理它的方式问题,而不是Rails / mongrel问题。您可以通过编写一个短脚本来直接(而不是在请求中)读取XML文件并查看其是否仍然失败来进行检查。 假设确实如此,我将考虑几件事。首先,我将检查您是否正在运行最新版本的REXML。几年前,UTF-16处理中存在一个错误(http://www.germane-software.com/projects/rexml/ticket/63)。 我要检查的第二件事是您是否遇到的问题与此类似:http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/ba7b0585c7a6330d。如果是这样,您可以在该线程中尝试解决方法。 如果以上方法均无济于事,请回复并提供更多信息,例如尝试读取文件时遇到的异常。 实际上,我认为您的问题可能与我在本文中详述的问题有关。如果您是我,我将在BinPad模式下在TextPad中将其打开,并在XML开始之前查看是否有任何字节顺序标记。 您是否尝试过使用JRuby进行此操作?我听说JRuby更好地支持Unicode字符串。 您可以尝试的另一件事是使用另一个XML解析库,例如libxml ou Hpricot。 REXML是您可以使用且可能无法扩展的最慢的Ruby XML库之一。 由于要使其正常工作,我只需要将第一个XML元素的编码属性更改为具有值UTF-8而不是UTF-16,该XML文件实际上就是UTF-8,并且由生成该文件的应用程序错误地标记。 XML文件是FileMaker Pro Advanced 8.5在OS X 10.5.4上生成的FileMaker DDR导出。 |