deep
1
如题,我include了别人的API头文件,其中包括了中文注释,在我的文件里,如果输入ui
,可以出现uintXX
的自动补全,但是如果输入p
(头文件中有个结构体类型定义为ProgramXX),则提示错误:
UnicodeDecodeError: 'utf8' codec can't decode byte X in position X: invalid start byte
最初以为是字体问题,但是替换为微软雅黑也不行。
我的emacs版本是25.2,用了ycmd
layer,可能是company-ycmd
deep
3
额,我用file查看文件属性发现是ISO-8859格式的,iconv强行转码成UTF-8格式之后,中文就全变成乱码了,请问这个有办法破解么?
deep
5
错误不会报了,只是以前虽然会报错,但是可以正常显示中文,现在不报错了,但是中文的部分都变成了乱码。。
把文件关掉 让 emacs 重新读转换过的文件编码。
怀疑 file 看到的文件属性是错误的,如果真是 ISO-8859
格式,能显示中文也是奇迹了。
-ι_- 就是关闭重新打开文件,就行。。。人自己会读。
使用 iconv 命令的时候不要指定源文件的编码,这样试试看:
iconv -t UTF-8 file.txt > new.txt
deep
9
只是关闭重读的话一直会出现本帖开始描述的错误,毕竟遇到问题想到的第一件事都是重启试试嘛。。。
只是iconv -t UTF-8 的话,会报错
我的命令是这样的:
iconv -f ISO-8859-16 -t UTF-8 file > outfile
什么系统?报错什么信息?我这里 macOS iconv 命令没报错。
随便用别的编辑器(比如 Vim)转换下编码,看看有没有效果吧。
deep
11
ubuntu 16.04,错误是
iconv: 未知 5634处的非法输入序列
vim什么的怎么看他解析成了什么编码格式。。。我不会用。。。
PS:在VIM里面直接就是乱码。。。都看不出来中文。。。
还是你 file 输入的文件编码不对,导致 iconv 的转换没完成。
Vim 里使用 :set fileencoding
就知道被识别为啥编码格式,:set fileencoding=utf-8
再把 buffer 写到文件就转成 utf-8 编码了。
可以试试别的编辑器,比如 gedit 啊 sublime text 等。
deep
14
locale -a
输出
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
POSIX
zh_CN.utf8
zh_SG.utf8
deep
15
在vim里输入:set fileencoding
,显示fileencoding=latin1
。。。拉丁解码么这是。。。中文直接乱码。。。
gedit我没查到怎么查看当前用的什么编码,sublime的话我电脑安装起来不是很方便,公司电脑不让上网
ISO-8859 是拉丁字符集,file
命令不准确,我随手就能给出一个实例:
⋊> file --mime-encoding ~/.repos/you-get_install/you-get.bat
/Users/gqj/.repos/you-get_install/you-get.bat: iso-8859-1
⋊> uchardet ~/.repos/you-get_install/you-get.bat
GB18030
datura
17
别人的一般都是windows下的,基本都是gbk的,然后有个别跟英文混一起会导致乱码。用16进制找到,多加个空格就好了……
Vim 中文显示乱码加一行配置就行了:
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
gedit 不行,还不让上网。。。Kate 呢?
带中文的编码多半为 gbk,试试直接使用 iconv -f GBK
命令转下吧。
@twlz0ne 我咋就没想起 uchardet
这命令呢。。。@deep 如果你能用 pip 的话,你安装尝试下。
反正用你能找到的随便什么方法,转换文件格式到 utf-8。尽快确认到底是 emacs 设置还是 ycmd 的问题。
>_<↯↯ 这都什么歪门邪道。。。
刚读了 Vim 手册,优化一下文件编码设置:
set fileencodings=utf8,chinese,taiwan,japan,korea,ansi
感觉比之前好理解多了,应该简繁日韩环境下使用都没问题,还没测试。不过应该没问题。
deep
19
thanks to all.
我确实不会用Vim,所以不想纠结Vim里面是乱码的问题了。其他的工具我电脑上都没装,可能试不了了
iconv -f GBK
一开始是不行的,后来我用datura(忘了怎么@人了。。)的查16进制的方法找到两个不正常的-
符号,改掉都就可以用了。现在转完了感觉没啥问题。
个人感觉像是ycmd的问题,因为一开始报的那个错误是python的一个错误。细节因为我对python和ycmd都不是很熟悉,就不太了解了。
不用 utf-8 编码的人不知道给别人造成了多大麻烦