Linux csh,将文本从utf-8文件复制到其他文件结果乱码

时间:2014-06-30 07:27:44

标签: utf-8 csh iconv

我有UTF-8俄语字符,我尝试从新文件复制 但结果是胡言乱语的人物。 源文件可以打开,在vim中看起来很好。 这是我脚本的一部分,

# this is how i found in the internet to convert file to utf-8
set new_file_full_path = "/home/foo/env/output/test.csv"
set f = "/home/foo/env/source/source_test.txt"
if( ! -e $new_file_full_path ) then
         touch  $new_file_full_path
       iconv -f latin1 -t utf8 $new_file_full_path
endif
set new_line_buffer = ""
foreach line("`cat $source_dir/$f`")
#echo $line
if( $i > 14 ) then
   echo "about to append to file"
   echo $new_file_full_path
   echo $line >> $new_file_full_path
   echo "done append to file"
 endif
 @ i = $i + 1
 end

我认为部分问题出在我做的时候:

目标文件

file -i /home/foo/env/output/test.csv
/home/foo/env/output/test.csv: text/plain; charset=unknown-8bit terminators

和源文件

file -i /home/foo/env/source/source_test.txt
text/plain; charset=utf-8

正如您所见,即使我尝试转换目标文件后,目标文件也不是utf-8文件

1 个答案:

答案 0 :(得分:0)

请注意,如果要在源文件和目标文件中保留UTF-8,则不需要iconv

iconv -f latin1 -t utf8 $new_file_full_path

此处您要求将 latin1 转换为文件/home/foo/env/output/test.csv的UTF-8,结果将显示在stdout中没有指定输出文件。

我认为你想要的东西是:

iconv -f utf8 -t latin1 $f -o $new_file_full_path

将您的源文件$f设置为UTF-8,然后在$new_file_full_path中获取latin1中的转换,如果它是您想要的。