19 个解决方案
#1
按照格式度就没问题啊。。。四个字节的。
#2
怎么读取?
怎么显示?
怎么显示?
#3
可是读取出来是乱码,具体代码怎么写啊,我是新手
#4
UTF每个字符占两个字节,读取的时候要注意了。
#5
先用fread取得字符到缓冲区,然后用iconv进行编码转换,具体操作可以参考(http://qq164587043.blog.51cto.com/261469/63349)。
#6
查一下linux api的手册
#7
设置系统的locale为utf-8
源码最好也是utf-8的
如果环境不能设置成utf-8那就得用iconv来转码了
源码最好也是utf-8的
如果环境不能设置成utf-8那就得用iconv来转码了
#8
你终端不是utf-8编码,文件再怎么折腾也没用。
#9
要么把文件改成 gbk 编码,要么在程序中读出来后做一个转码再显示。
不推荐在程序中使用中文,英文不会有这些多余的麻烦。
不推荐在程序中使用中文,英文不会有这些多余的麻烦。
#10
读取出来进行编码转换之后再显示
#11
把终端设置成utf8格式吧.其它的都不用动.
#12
~~~~正解,楼主可以结贴啦
#13
虽然不懂C/C++,我在这边只是潜水,但纠正一下上面的一些说法
utf-8是变长的,不能单纯按字节计算,除非你熟练掌握utf-8的算法——官方有公开资料,很简单的计算而已
utf-8内的汉字如果不涉及extend B/C/D(version 6),是三字节,涉及就要考虑变长
而且你不能保证整个文本只有汉字,如果有韩文等等,也不是三字节的……
所谓乱码,是三方的编码不统一的结果:源、程序码文件、终端
程序码文件如果全部是ASCII就可忽略,因为0-127在ANSI和unicode是一致的
如果有类库可以处理unicode,直接作用类库好了,懒得自己读字节搞计算,保持三方一致就行
unicode文本文件还要做除BOM操作,如果用类库,一般都已经帮你完成,自己读字节的话就要考虑
UCS2是定长2字节,utf-32是定长4字节,utf-8和utf-16都是变长的,utf-16要考虑高低位,utf-8则没有高低位问题
utf-8是变长的,不能单纯按字节计算,除非你熟练掌握utf-8的算法——官方有公开资料,很简单的计算而已
utf-8内的汉字如果不涉及extend B/C/D(version 6),是三字节,涉及就要考虑变长
而且你不能保证整个文本只有汉字,如果有韩文等等,也不是三字节的……
所谓乱码,是三方的编码不统一的结果:源、程序码文件、终端
程序码文件如果全部是ASCII就可忽略,因为0-127在ANSI和unicode是一致的
如果有类库可以处理unicode,直接作用类库好了,懒得自己读字节搞计算,保持三方一致就行
unicode文本文件还要做除BOM操作,如果用类库,一般都已经帮你完成,自己读字节的话就要考虑
UCS2是定长2字节,utf-32是定长4字节,utf-8和utf-16都是变长的,utf-16要考虑高低位,utf-8则没有高低位问题
#14
你需要将UTF8转换成本地语言, 或转换成UnionCode再显示
直接将UTF8传给渲染API可能会当作ANSI,从而转换失败,渲染错误
直接将UTF8传给渲染API可能会当作ANSI,从而转换失败,渲染错误
#15
这个看你是否要显示,如果要显示的话,必须转换编码,windows 默认的中文编码是 gb2312 而不是 utf8,如果你不需要显示,比如只需要转存到另一个文件中,那么无需转码,直接复制过去就行。这久好比传送密码,中途站如果只是传送不想看内容就不必解码,如果中途站也想看到内容就必须解码。
#16
用转码的库。
UTF-8不是等长的,比如a就1B,而大多数汉字是2B,它只是Unicode的一种实现形式。
具体看这个
http://www.kuqin.com/language/20080507/8130.html
至于怎么转换,那就该用第三方的库了。
UTF-8不是等长的,比如a就1B,而大多数汉字是2B,它只是Unicode的一种实现形式。
具体看这个
http://www.kuqin.com/language/20080507/8130.html
至于怎么转换,那就该用第三方的库了。
#17
UTF-8几乎所有汉字都是三字节。
#18
谢谢大家,我知道了
#19
是怎么解决的?我要读取文件(中文+一点点英文),并提取文件中的部分内容,需要进行字符串的比较,调试的时候发现读的都是乱码~明明相等的,比较结果是不相等~~
#20
#1
按照格式度就没问题啊。。。四个字节的。
#2
怎么读取?
怎么显示?
怎么显示?
#3
可是读取出来是乱码,具体代码怎么写啊,我是新手
#4
UTF每个字符占两个字节,读取的时候要注意了。
#5
先用fread取得字符到缓冲区,然后用iconv进行编码转换,具体操作可以参考(http://qq164587043.blog.51cto.com/261469/63349)。
#6
查一下linux api的手册
#7
设置系统的locale为utf-8
源码最好也是utf-8的
如果环境不能设置成utf-8那就得用iconv来转码了
源码最好也是utf-8的
如果环境不能设置成utf-8那就得用iconv来转码了
#8
你终端不是utf-8编码,文件再怎么折腾也没用。
#9
要么把文件改成 gbk 编码,要么在程序中读出来后做一个转码再显示。
不推荐在程序中使用中文,英文不会有这些多余的麻烦。
不推荐在程序中使用中文,英文不会有这些多余的麻烦。
#10
读取出来进行编码转换之后再显示
#11
把终端设置成utf8格式吧.其它的都不用动.
#12
~~~~正解,楼主可以结贴啦
#13
虽然不懂C/C++,我在这边只是潜水,但纠正一下上面的一些说法
utf-8是变长的,不能单纯按字节计算,除非你熟练掌握utf-8的算法——官方有公开资料,很简单的计算而已
utf-8内的汉字如果不涉及extend B/C/D(version 6),是三字节,涉及就要考虑变长
而且你不能保证整个文本只有汉字,如果有韩文等等,也不是三字节的……
所谓乱码,是三方的编码不统一的结果:源、程序码文件、终端
程序码文件如果全部是ASCII就可忽略,因为0-127在ANSI和unicode是一致的
如果有类库可以处理unicode,直接作用类库好了,懒得自己读字节搞计算,保持三方一致就行
unicode文本文件还要做除BOM操作,如果用类库,一般都已经帮你完成,自己读字节的话就要考虑
UCS2是定长2字节,utf-32是定长4字节,utf-8和utf-16都是变长的,utf-16要考虑高低位,utf-8则没有高低位问题
utf-8是变长的,不能单纯按字节计算,除非你熟练掌握utf-8的算法——官方有公开资料,很简单的计算而已
utf-8内的汉字如果不涉及extend B/C/D(version 6),是三字节,涉及就要考虑变长
而且你不能保证整个文本只有汉字,如果有韩文等等,也不是三字节的……
所谓乱码,是三方的编码不统一的结果:源、程序码文件、终端
程序码文件如果全部是ASCII就可忽略,因为0-127在ANSI和unicode是一致的
如果有类库可以处理unicode,直接作用类库好了,懒得自己读字节搞计算,保持三方一致就行
unicode文本文件还要做除BOM操作,如果用类库,一般都已经帮你完成,自己读字节的话就要考虑
UCS2是定长2字节,utf-32是定长4字节,utf-8和utf-16都是变长的,utf-16要考虑高低位,utf-8则没有高低位问题
#14
你需要将UTF8转换成本地语言, 或转换成UnionCode再显示
直接将UTF8传给渲染API可能会当作ANSI,从而转换失败,渲染错误
直接将UTF8传给渲染API可能会当作ANSI,从而转换失败,渲染错误
#15
这个看你是否要显示,如果要显示的话,必须转换编码,windows 默认的中文编码是 gb2312 而不是 utf8,如果你不需要显示,比如只需要转存到另一个文件中,那么无需转码,直接复制过去就行。这久好比传送密码,中途站如果只是传送不想看内容就不必解码,如果中途站也想看到内容就必须解码。
#16
用转码的库。
UTF-8不是等长的,比如a就1B,而大多数汉字是2B,它只是Unicode的一种实现形式。
具体看这个
http://www.kuqin.com/language/20080507/8130.html
至于怎么转换,那就该用第三方的库了。
UTF-8不是等长的,比如a就1B,而大多数汉字是2B,它只是Unicode的一种实现形式。
具体看这个
http://www.kuqin.com/language/20080507/8130.html
至于怎么转换,那就该用第三方的库了。
#17
UTF-8几乎所有汉字都是三字节。
#18
谢谢大家,我知道了
#19
是怎么解决的?我要读取文件(中文+一点点英文),并提取文件中的部分内容,需要进行字符串的比较,调试的时候发现读的都是乱码~明明相等的,比较结果是不相等~~