ruby-on-rails - Rails 应用程序中的 Iconv.conv 将 unicode 转换为 ASCII//translit

标签 ruby-on-rails ruby apache encoding character-encoding

我们想将斯洛伐克语中的 unicode 字符串转换为纯 ASCII(不带重音符号/carons)那就是: č->c š->s á->a é->e etc.

我们尝试过:

cstr = Iconv.conv('us-ascii//translit', 'utf-8', a_unicode_string)

它在一个系统 (Mac) 上运行,但在另一个系统 (Ubuntu) 上运行时出现“?”转换后的重音字符。

问题:iconv 正在使用 LANG/LC_ALL 变量。我不知道为什么,当编码已知时,但是......你必须将语言环境变量设置为 something.utf8,例如:sk_SK.utf8 或 en_GB.utf8

下一步是尝试在 config/application.rb 中设置 ENV['LANG'] 和 ENV['LC_ALL']。 ruby 中的 Iconv 忽略了这一点。

另一个尝试是在/etc/default/locale 中使用全局系统设置 - 这在命令行中有效,但不适用于 Rails 应用程序。原因:apache有自己的环境。因此最终的解决方案是将 LANG/LC_ALL 变量添加到/etc/apache2/envvars 中:

export LC_ALL="en_GB.utf8"
export LANG="en_GB.utf8"
export LANGUAGE="en_GB.utf8"

重新启动 apache,它成功了。

这与其说是一个问题,不如说是一个操作方法。但是,如果有人有更好的解决方案,我想知道。

最佳答案

你可以试试unaccent方法。

关于ruby-on-rails - Rails 应用程序中的 Iconv.conv 将 unicode 转换为 ASCII//translit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3559509/

相关文章:

ruby - google-api-ruby-client:请求序列化导致空请求

java - http协议(protocol)版本 "HTTP/1.1"是否包括https?

regex - 如何为 apache ProxyPassMatch 编写正则表达式来反向代理 API 调用

ruby-on-rails - 可以使用扣币一次性付款吗?

ruby-on-rails - 在 Rails 中递增数据库值

ruby - 未定义方法 '>' 为 nil :NilClass <NoMethodError>

ruby - 如果字符串包含元音并且按字母顺序排列,则输出字符串

php - 在不创建虚拟主机的情况下配置 laravel

javascript - 使隐藏的输入字段可见 HTML Javascript

ruby-on-rails - 为什么我的 application.html.erb 中的 if 语句没有像我预期的那样工作?