C语言读取UTF-8文本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言读取UTF-8文本相关的知识,希望对你有一定的参考价值。

有一个文本文件是以UTF-8编码的,用C语言读入时出现错误,内容如下:
1 sheer /ʃiә/adj.完全的,十足的;陡峭的,垂直的;极薄的,透明的adv.垂直地,陡峭地vi.(off)急转向,偏离
2 comment /kɔment/n.评论,意见;注释
3 distress /dis'tres/n.忧虑,悲伤;不幸

如果把它保存成ASCII 编码的文本就可以正确读入,但那样音标就不能正确显示了:
1 sheer /?i?/adj.完全的,十足的;陡峭的,垂直的;极薄的,透明的adv.垂直地,陡峭地vi.(off)急转向,偏离
2 comment /k?ment/n.评论,意见;注释
3 distress /dis'tres/n.忧虑,悲伤;不幸

我想这是编码的问题,请请问怎么解决啊?

参考技术A UTF-8是一种多字节编码字符集,Unicode字符,也可以是一个字节,符号:

1个字节:0XXXXXXX
2个字节:110XXXXX 10XXXXXX /> 3个字节: 1110XXXX 10XXXXXX 10XXXXXX
4个字节:11110xxx 10XXXXXX 10XXXXXX 10XXXXXX

本文根据上面的字符串遍历的特点来确定一个字符串是否是UTF-8编码。应当注意的是,每个字节的UTF-8字符串的值具有一定的范围,而不是所有的值?是有效的UTF-8字符,但在一般应用足够长的字符串判断的情况下,更准确,是实现比较简单。具体的字节范围,可以发现在这本书的“Unicode解释”6.4.3。
布尔IsUTF8(const void *的pbuffer的,长尺寸)

布尔IsUTF8 = TRUE;
unsigned char型*开始=(无符号字符*)pbuffer的/无符号的char *结束=(unsigned char型)pbuffer的+大小;
(起点和终点)

(*开始<0X80)/ /(10000000):值小于0x80的ASCII的字符

开始+ +;

否则,如果(*启动<(0XC0))/ /(11000000):值吗? 0XC0之间的范围0x80无效的UTF-8字符

IsUTF8 = FALSE;
突破;

否则,如果(*开始(0XE0))/在2个字节的UTF-8字符/(11100000):

(开始> =结束 - 1)
突破;
((开始[1](0XC0) )= 80H时)

IsUTF8 = FALSE;
突破;

开始+ = 2;

否则,如果(*启动<(31:8))/ /(11110000):结束的3个字节的UTF-8字符

(“开始”> = - 2)
突破;。 .. />((开始[1](为0xC0))= 0x80的| |(启动[2](为0xC0))= 80H时)

IsUTF8 = FALSE;
休息

开始+ = 3;



IsUTF8 = FALSE;
突破;


回报IsUTF8;


UTF-UCS编码的16至16个单位。小于0x10000的UCS码,UTF-16编码是等于相应的UCS代码的16位无符号整数。对于不小于0x10000的UCS码,定义了一个算法。然而,实际使用的UCS2,或者UCS4的BMP必然小于0x10000,所以现在你可以认为UTF -16和UCS-2基本相同。 UCS-2是一种编码方案,UTF-16已被用于实际的传输,所以我们要考虑的字节顺序。本回答被提问者和网友采纳
参考技术B 不要用char,用w_char处理就可以了

如何读取CSV文件后合并内容

参考技术A

两张表:ReaderInformation.csv,ReaderRentRecode.csv

ReaderInformation.csv: 

ReaderRentRecode.csv: 

pandas读取csv文件,并进行csv文件合并处理:

# -*- coding:utf-8 -*-import csv as csvimport numpy as np# -------------# csv读取表格数据# -------------'''
csv_file_object = csv.reader(codecs.open('ReaderRentRecode.csv', 'rb'))
header = csv_file_object.next()
print header
print type(header)
print header[1]

data = []
for row in csv_file_object:
data.append(row)
data = np.array(data)

print data[0::, 0]
'''# -------------# pandas读取表格数据# -------------import pandas as pd

df = pd.read_csv('ReaderRentRecode.csv')  # 读者借阅信息表'''
print df.head()
print '----------------'
print df[['读者证号', '读者姓名', '书名', '中图法分类号']]  # 选取其中的四列
print '------------------------------------------------------------------'
print
'''dd = pd.read_csv('ReaderInformation.csv')'''
print dd.head()
print '----------------'
print dd[['读者证号', '读者性别', '读者单位', '读者类别']]
print '------------------------------------------------------------------'
print
'''data = pd.merge(df, dd, on=['读者证号', '读者姓名'], how='left')  # pandas csv表左连接data = data[['读者证号', '读者姓名', '读者性别', '书名', '中图法分类号', '读者单位', '读者类别']]print dataprint '------------------------------------------------------------------'print# -------------# pandas写入表格数据# -------------data.to_csv(r'data.csv', encoding='gbk')123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354

合并后的csv文件:data.csv 

通过使用pandas的函数merge来进行两个表的左连接,最后得到相应的data.csv文件。

以上是关于C语言读取UTF-8文本的主要内容,如果未能解决你的问题,请参考以下文章

C语言文件的文本怎么读取?

关于C语言中文本文件的逐行读取的实现

求c语言读取写入文本文件的函数实现

C语言如何读取TXT全部字符?

C语言中fscanf()按一定的格式读取文本文件!

c语言 如何读取中文字符串