带有unicode输出的SVN Hook

时间:2012-09-19 14:19:10

标签: svn unicode hook locale diacritics

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

如果我通过shell执行脚本,一切都很好。如果subversion执行了钩子,那么变音符号就会被加扰。我尝试使用

从post-commit钩子执行邮件脚本
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

有人有想法吗?

2 个答案:

答案 0 :(得分:3)

  1. 你的问题有两个三个面孔
    • 您的钩子可以获取Unicode数据(并且它会以未修改的形式接收日志消息)
    • 您的邮件程序如何发送此Unicode
    • 您的MUA可以显示非ASCII电子邮件的正文(通过邮件正确准备
  2. 根据上述问题的顺序获得答案需要一些步骤

    1. 对于挂钩测试,通过存储在文件中替换邮件数据,通过查看器检查内容,这可以呈现Unicode文本(并检查,该文本确实是UTF8,对于变音符号,它可以是一些windows- * charsets)
    2. 如果您在第1页中获得可读文本,则必须检查先前收到的通知的标题(在您的MUA中)并检查Content-Typecharset=部分,mime-type在此处无关紧要)和(可选)Content-Transfer-Encoding。我假设并怀疑 charset 定义实际状态(us-ascii vs UTF8)不匹配,在本例中为MTA和MUA可能会给你描述结果。我不知道,您是否可以在mailer.py中重新定义邮件标题,但必须创建包含正确标题的邮件内容类型
    3. 当您能够使用Content-Type: text/plain; charset=UTF8生成电子邮件时,请测试您的MUA以处理UTF8编码的电子邮件(可以独立于之前的结果测试移至p.0)
    4. PS:这个问题必须解决给ServerFault:它主要是postmaster的问题领域,你有更多的机会看到真正的postmaster(并得到完整的详细答案,而不是我的概要) SF

答案 1 :(得分:0)

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

#!/bin/sh

export LANG="de_DE.UTF-8"

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