2

我有一个 SVN 钩子,它执行 svnlook 并通过电子邮件发送提交消息。当我的提交消息中有变音符号(ä、ü、ö 或 ß)时,我只会得到 "?\195?\159?\195?\182" 输出而不是变音符号。

如果我通过 shell 执行脚本,一切都很好。如果颠覆执行了钩子,那么元音变音是加扰的。我尝试使用从提交后挂钩执行邮件脚本

LC_ALL="en_US-utf8" "$REPOS"/hooks/mailer.py "$REPOS" "$REV" 

在我的邮件程序中,我执行 svnlook 命令

cmd = 'export LC_ALL="en_US-utf8" && svnlook info ' +  sys.argv[1]                                                                          

我还使用在我的 mailer.py 中设置语言环境

locale.setlocale(locale.LC_ALL, 'en_US-utf8')

我收到的唯一错误消息是:

svnlook: warning: cannot set LC_CTYPE locale
svnlook: warning: environment variable LC_ALL is en_US-utf8
svnlook: warning: please check that your locale name is correct

任何人的想法?

4

2 回答 2

3
  1. 你的问题有两个三个面
    • 您的钩子能否获取 Unicode 数据(并且它是否以未修改的形式接收日志消息)
    • 您的邮寄者如何发送此 Unicode
    • 您的 MUA 能否显示非 ASCII 电子邮件的正文(由邮件程序正确准备)

按上述问题顺序获得答案的一些必要步骤

  1. 对于通过存储在文件中的钩子替换数据邮件进行测试,通过查看器检查内容,这可以呈现 Unicode 文本(并检查,该文本真的是 UTF8,对于变音符号,它可以是一些 windows-* 字符集)
  2. 如果您在 p.1 中获得可读文本,则必须检查先前收到的通知的标题(在您的 MUA 中)并检查Content-Typecharset=部分,mime-type 在这里无关)和(可选)Content-Transfer-Encoding。我假设并怀疑字符集定义与实际状态(us-ascii vs UTF8)不匹配,在这种情况下,MTA 和 MUA 可能会给出您描述的结果。我不知道,您能否在 mailer.py 中重新定义邮件标头,但您必须创建具有正确标头 Content-Type 的邮件消息
  3. 当您能够使用 生成电子邮件时Content-Type: text/plain; charset=UTF8,测试您的 MUA 以处理 UTF8 编码的电子邮件(可以移动到 p.0,与之前的结果测试无关)

PS:这个问题一定要问ServerFault:这主要是postmaster的问题,你有更多机会在SF上看到真正的postmaster(并得到完整详细的答案而不是我的概要)

于 2013-03-08T14:09:27.610 回答
0

您必须将以下行添加到您的挂钩脚本中:

#!/bin/sh

export LANG="de_DE.UTF-8"

有同样的问题,这对我有用。

于 2017-07-14T07:44:27.507 回答