You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过命令行设置含UTF-8字符的SVN属性避免乱码?

解决SVN属性设置特殊字符乱码问题(propset无--encoding参数可用)

这个问题我之前也踩过坑,确实svn propset--encoding参数对属性值本身无效,它主要是用来处理文件内容的编码关联的。咱们可以从终端编码、输入方式这几个角度来解决:

方案1:用文件传递属性值(最稳定可靠)

直接绕过终端编码的干扰,把属性值写到UTF-8编码的文件里再传递给SVN:

  1. 用文本编辑器新建一个文件(比如叫prop_value.txt),写入äüöüöü,保存时务必选择UTF-8编码(别用GBK、ANSI这些)。
  2. 执行propset命令读取文件内容作为属性值:
    svn propset testprop -F prop_value.txt test.txt
    
  3. 之后执行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

火山引擎 最新活动