如何通过命令行设置含UTF-8字符的SVN属性避免乱码?
解决SVN属性设置特殊字符乱码问题(propset无--encoding参数可用)
这个问题我之前也踩过坑,确实svn propset的--encoding参数对属性值本身无效,它主要是用来处理文件内容的编码关联的。咱们可以从终端编码、输入方式这几个角度来解决:
方案1:用文件传递属性值(最稳定可靠)
直接绕过终端编码的干扰,把属性值写到UTF-8编码的文件里再传递给SVN:
- 用文本编辑器新建一个文件(比如叫
prop_value.txt),写入äüöüöü,保存时务必选择UTF-8编码(别用GBK、ANSI这些)。 - 执行propset命令读取文件内容作为属性值:
svn propset testprop -F prop_value.txt test.txt - 之后执行
svn propget testprop test.txt,只要你的终端是UTF-8编码(Linux/macOS默认基本都是,Windows可以先敲chcp 65001切换),就能正常显示特殊字符。
方案2:统一终端与SVN的编码
如果不想用文件,就确保终端的编码和SVN处理的编码一致:
- Linux/macOS:先设置终端的字符编码为UTF-8,再执行命令:
export LC_CTYPE=en_US.UTF-8 svn propset testprop "äüöüöü" test.txt - Windows:先切换控制台编码到UTF-8,再操作(记得把控制台字体换成Consolas这类支持UTF-8的):
chcp 65001 svn propset testprop "äüöüöü" test.txt
方案3:十六进制转义输入(应急小技巧)
如果上面两种方法都不方便,还可以直接输入字符的UTF-8十六进制字节,让SVN接收正确的二进制流:
比如ä的UTF-8字节是c3a4,ü是c3bc,ö是c3b6,Linux/macOS下可以用printf转义:
svn propset testprop "$(printf '\xc3\xa4\xc3\xbc\xc3\xb6\xc3\xbc\xc3\xb6\xc3\xbc')" test.txt
这样设置的属性值字节完全正确,后续propget只要终端是UTF-8就能正常显示。
验证方法
设置完属性后,可以用下面的命令检查字节是否正确:
svn propget testprop test.txt | hexdump -C
正常情况下应该输出c3 a4 c3 bc c3 b6 c3 bc c3 b6 c3 bc,这就是äüöüöü的UTF-8字节序列。
内容的提问来源于stack exchange,提问作者orontan




