- 现象
- c示例
- environ文件
- 具体原因
- 解决
使用curl命令从服务器中获取的是json字符串,将字符串存入文件中,文件类型成了data。
# file 1.out 1.out: data
vim打开文件后,出现如下乱码:
#^@fd^@dd^@e2^@c4^@e4^@c3#
cat -e也能看到这些字符。
c示例经查,^@实际上对应c语言中的 。
// cat /tmp/1.c #include#include int main(){ FILE *fp = NULL; fp = fopen("/tmp/test.txt", "w+"); char* str = "hello"; fwrite(str, strlen(str)+1, 1, fp); fclose(fp); }
编译并执行文件
# gcc -o /tmp/1 /tmp/1.c # /tmp/1 # cat /tmp/test.txt hello # 这里字符串本身没换行,为了方便看,在这里手动换行了 # cat -e /tmp/test.txt hello^@environ文件
environ文件也是有这种情况的。
# cat -e /proc/$$/environ TERM=xterm^@HOME=/root^@SHELL=/bin/bash^@USER=root^@LOGNAME=root^@PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin^@XDG_SESSION_ID=22272^@具体原因
暂时不清楚当事人在编辑这个文件时,做了什么操作,导致的这个情况。
解决使用tr命令将其中的 字符删除。
[root@nano-kvm-11 tmp]# cat /tmp/1.out |tr -d ' ' |cat -e mysql.driverClassName=com.mysql.jdbc.Driver$ mysql.validationQuery=SELECT 1$ mysql.testWhileIdle=true$ mysql.testonBorrow=false$ mysql.timeBetweenEvictionRunsMillis=30000$ mysql.minEvictableIdleTimeMillis=1800000$ mysql.removeAbandoned=true$ mysql.removeAbandonedTimeout=180$ mysql.logAbandoned=true$ mysql.testonReturn=false$ mysql.poolPreparedStatements=false$ mysql.filters=stat$ $ #fddde2c4e4c3#$ mysql.cms.db.url=$ mysql.cms.db.username=$ mysql.cms.db.password=$ mysql.cms.db.maxWait=3000$ mysql.cms.db.initialSize=10$ mysql.cms.db.minIdle=10$ mysql.cms.db.maxActive=100$ $ #ccb7fddde2c4e4c3#$



