【问题标题】:Want to use more than one encoding in Action Mailer想要在 Action Mailer 中使用多个编码
【发布时间】:2014-07-03 12:13:15
【问题描述】:

我有一个已国际化的 Rails 4 应用程序。我的应用程序为每种语言发送电子邮件。它最初是用英语和法语编写的。在我有法语文本的地方,我在文件开头添加了# encoding: utf-8 语句。

我刚刚在我的应用程序中添加了葡萄牙语。在我的邮件中,我在文件的开头有 # encoding: utf-8 语句。但是,由于 UTF-8 编码,当我尝试发送葡萄牙语电子邮件时它不起作用。我已将这些电子邮件中的字符集从 UTF-8 更改为 ISO-8859-1。

我在邮件程序中有外文文本,而不是使用 I18n 哈希,因为我有一些多语言的人在使用我的应用程序。每个人都可以选择他们希望接收电子邮件的语言。

有没有办法在一个文件中包含多种类型的编码?我已经进行了在线搜索,但只看到了具有单个值的示例。

任何帮助将不胜感激。

更新:2014 年 7 月 3 日上午 7:25 CDT

这是我在尝试发送葡萄牙语电子邮件时遇到的错误。

I, [2014-07-03T06:44:38.810000 #31093]  INFO -- : Completed 500 Internal Server Error in 43ms
F, [2014-07-03T06:44:38.812179 #31093] FATAL -- : 
ActionView::Template::Error (Your template was not saved as valid UTF-8. Please either specify UTF-8 as the encoding for your template in your text editor, or mark the template with its encoding by inserting the following as the first line of the template:

# encoding: <name of correct encoding>.

The source of your template was:

<!DOCTYPE html>
<html>
  <head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /></head>
  <body>
        <p style="text-align: center;"><a href="http://www.iktusnetlive.com"><img src="http://www.iktusnetlive.com/assets/header-speakers-pt.jpg", alt: "iktusNETlive"></a></p>
    <p><%= @user.first_name %>, sua conta de usuário GRATUITA iktusNET foi ativada!!!</p>
    <p>Você agora pode usar sua conta de usuário GRATUITA iktusNET com endereço de email <%= @user.email %> com nome de usuário <%= @user.username %>.</p>
    <p>Você agora tem acesso ao Webcast de Vídeo ao Vivo, ao FÓRUM de Discussão à Rede de CÍRCULO Social.</p>
    <p>Nota:  Tenha certeza que você escreva abaixo sua informação de login. Letras em Caixa Alta no seu endereço de email e nome de usuário serão ignoradas. Seu endereço de email e nome de usuário serão salvos somente com letras em caixa baixa. Nós armazenamos a sua senha de maneira segura. Ela é encriptada de tal forma que ninguém pode descobrir o que ela é, incluindo o Time da iktusNET. Contanto, se você esquecer a sua senha você pode requerer que sua senha seja resetada na tela de login.</p>
        <p>Nós temos uma Biblioteca de Mídia onde você pode ouvir, assistir e ler materiais de ministérios que ensinam mensagens de forma similar à ensinada pelo Centro de Oração de Tulsa. Você pode usar a Biblioteca de Mídia sem estar logado na sua Conta de Usuário GRATUITA iktusNET. Esta página pode ser acessada a partir daS PáginaS HOME ou MÍDIA. </p>
    <p style="text-align: justify;">Clique <%= link_to "here", "http://www.iktusnetlive.com/pt/invite" %> para Convidar seus AMIGOS para ingressar à iktusNETlive. </p>
    <p>Muito obrigado por ingressar à iktusNET e tenha um ótimo dia! </p>
        <p>O Time iktusNET</p>
  </body>
</html>):
  app/mailers/user_mailer.rb:31:in `acctact_email_pt'
  app/controllers/users_controller.rb:134:in `update'

【问题讨论】:

  • 我认为使用 UTF-8 不会阻止您发送葡萄牙语邮件。
  • 我添加了在尝试发送巴西某人发给我的葡萄牙语电子邮件时遇到的错误。当我尝试打开它时,它说它是一个西拉丁语 ISO 1 文件。如您所见,字符集是 UTF-8。由于我收到 500 错误,我已将其更改为 ISO-8859-1,以便以后发送电子邮件。这会解决问题还是我应该在视图顶部添加# encoding ISO-8859-1?我不必对法语电子邮件执行此操作。
  • 问题是文件本身在 utf-8 中编码不正确。这可能是因为您用来创建它的文本编辑器默认没有保存为 utf-8。更好的解决方案是弄清楚如何做到这一点,并为所有内容使用 utf-8。 (现在是 ruby​​ 的默认设置)
  • 我将重新创建文件并复制巴西人发给我的文件中的文本。这可能会解决问题。我将在今天晚些时候对此进行测试。
  • @Slicedpan 你的建议奏效了。请把它作为答案,我会检查它。非常感谢!!!

标签: ruby-on-rails ruby encoding character-encoding internationalization


【解决方案1】:

视图文件本身的编码不正确。您必须配置文本编辑器以将文件保存为有效的 utf-8。

将文件标记为#encoding utf-8 将无济于事,因为它会强制 ruby​​(错误地)将其解释为 utf-8,而实际上它是不同的编码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 2011-10-31
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 2012-03-07
    相关资源
    最近更新 更多