linux shell使用utf8,如何修复bash中UTF8字符串的用法?

我有一个bash脚本,其中包含几个utf-8字符串包含的变量。这些变量用作sctript中bash函数的参数,该函数使用此参数调用cp和python脚本。在

此脚本在我的计算机上正常运行,但无法在另一台计算机上运行。我试图用set -x和其他东西进行调试,但我找不到根本原因,只有这个差异。在

有一个最小化的例子——比如JS的Plunker;)我有以下test.sh#!/bin/bash

set -x

function aaa() {

echo "$1"

}

echo 'öüóőúéáűíÖÜÓŐÚÉÁŰÍ'

aaa 'öüóőúéáűíÖÜÓŐÚÉÁŰÍ'

我复制到我的两个主机上

好的表现如下:+ echo öüóőúéáűíÖÜÓŐÚÉÁŰÍ

öüóőúéáűíÖÜÓŐÚÉÁŰÍ

+ aaa öüóőúéáűíÖÜÓŐÚÉÁŰÍ

+ echo öüóőúéáűíÖÜÓŐÚÉÁŰÍ

öüóőúéáűíÖÜÓŐÚÉÁŰÍ

然而,坏的情况表明:+ echo $'\303\266\303\274\303\263\305\221\303\272\303\251\303\241\305\261\303\255\303\226\303\234\303\223\305\220\303\232\303\211\303\201\305\260\303\215'

öüóőúéáűíÖÜÓŐÚÉÁŰÍ

+ aaa $'\303\266\303\274\303\263\305\221\303\272\303\251\303\241\305\261\303\255\303\226\303\234\303\223\305\220\303\232\303\211\303\201\305\260\303\215'

+ echo $'\303\266\303\274\303\263\305\221\303\272\303\251\303\241\305\261\303\255\303\226\303\234\303\223\305\220\303\232\303\211\303\201\305\260\303\215'

öüóőúéáűíÖÜÓŐÚÉÁŰÍ

以下是调试的一些详细信息:

运行良好的机器是一个带有bash=4.2-2ubuntu2.6的Ubuntu Trusty,而工作不好的机器是一个带有bash=4.3-7ubuntu1.5的Ubuntu Precise。在

两台机器中的locale是相同的:$ locale

LANG=en_US.UTF-8

LANGUAGE=

LC_CTYPE=en_US.UTF-8

LC_NUMERIC=en_US.UTF-8

LC_TIME=en_US.UTF-8

LC_COLLATE=en_US.UTF-8

LC_MONETARY=en_US.UTF-8

LC_MESSAGES=POSIX

LC_PAPER=en_US.UTF-8

LC_NAME=en_US.UTF-8

LC_ADDRESS=en_US.UTF-8

LC_TELEPHONE=en_US.UTF-8

LC_MEASUREMENT=en_US.UTF-8

LC_IDENTIFICATION=en_US.UTF-8

LC_ALL=

更新我搞错了cp,对不起。在

我认为,在本例中,python异常与此无关,因为它是在bash中中断的。这个回溯能帮上什么忙吗?在+ /tmp/callrecord-renamer.py --skip --contacts $'/var/datastore/T\303\274nci/Rendszer/DropboxClone/contacts.ini' $'/var/datastore/T\303\274nci/DropboxClone/H\303\215V\303\201SFELV\303\211TELEK'

Traceback (most recent call last):

File "/tmp/callrecord-renamer.py", line 316, in

main()

File "/tmp/callrecord-renamer.py", line 312, in main

FileManager(args.recording_path, contacts_path, args.no_change, args.skip_errors).update_files_in_directory()

File "/tmp/callrecord-renamer.py", line 87, in update_files_in_directory

self.contacts.load()

File "/tmp/callrecord-renamer.py", line 56, in load

self.database.read(self.file_path)

File "/usr/lib/python3.2/configparser.py", line 689, in read

self._read(fp, filename)

File "/usr/lib/python3.2/configparser.py", line 994, in _read

for lineno, line in enumerate(fp, start=1):

File "/usr/lib/python3.2/codecs.py", line 300, in decode

(result, consumed) = self._buffer_decode(data, self.errors, final)

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 3176: invalid start byte

更新2

我已经检查过:这个错误是独立于bash代码引起的。.ini文件编码错误。。。对不起所有调试器助手!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值