kattisle csv文件从第五行开始读

閫氳繃xlrd鐨凱ython-Unicode杞崲涓篣TF8鐨凜SV鏂囦欢-python,unicode,缂栫爜encoding,csv,xlrd-CodeGo.net
閫氳繃xlrd鐨凱ython-Unicode杞崲涓篣TF8鐨凜SV鏂囦欢
鎴戞兂瑕佷竴涓狤xcel鐢靛瓙琛ㄦ牸杞崲鍒癙ython xlrd鍜孋SV妯″潡锛屼絾鎴戝緱鍒版寕鏂簡缂栫爜闂銆 Xlrd浜х敓鐨勮緭鍑轰粠Excel涓殑Unicode鍜孋SV妯″潡闇瑕乁TF-8銆
鎴戞兂鍍忥紝杩欐棤鍏充笌xlrd妯″潡锛氫竴鍒囨甯竜utputing鍒皊tdout鎴栧叾浠栬緭鍑猴紝涓嶉渶瑕佺壒瀹氱殑缂栫爜銆
鍦ㄥ伐浣滆〃缂栫爜涓篣TF-16-LE锛屾牴鎹book.encoding浠涔堟垜鍋氱殑绠鍖栫増鏈槸锛
from xlrd import *
import csv
b = open_workbook('file.xls')
s = b.sheet_by_name('Export')
bc = open('file.csv','w')
bcw = csv.writer(bc,csv.excel,b.encoding)
for row in range(s.nrows):
this_row = []
for col in range(s.ncols):
this_row.append(s.cell_value(row,col))
bcw.writerow(this_row)
杩欏皢浜х敓浠ヤ笅閿欒锛屽ぇ绾740琛屼腑锛
UnicodeEncodeError: 'ascii' codec can't encode character u'\xed' in position 5: ordinal not in range(128)
璇ュ间技涔庤秺鏉ヨ秺鎸備簡鏄516-777316鈥-鍦ㄥ師鏉ョ殑Excel宸ヤ綔琛ㄤ腑鐨勬枃鏈负鈥516-7773167鈥濓紙涓庝笂骞村簳7锛
鎴戜細鏄紭鍏堜釜鎵胯锛屾垜鍙湁涓涓猙lur鐨勬剰璇嗗瓧绗︾紪鐮佹槸濡備綍宸ヤ綔鐨 CodeGo.net锛屾墍浠ュぇ閮ㄥ垎鐨勪笢瑗挎垜璇曡繃鍒扮洰鍓嶄负姝㈤兘鎽哥储鐨勬帓鍒.encode鍜.decode鍦s.cell_value(row,col)濡傛灉鑳芥彁鍑轰竴涓В鍐虫柟妗堬紝鎴戝皢涓嶈儨鎰熸縺-鐢氳嚦鏇村ソ锛屽鏋滀綘鑳芥彁渚涗粈涔堜笉宸ヤ綔鐨勮В閲婏紝涓轰粈涔堬紝璁╂垜鍙互鏇村鏄撳湴鍦ㄦ湭鏉ョ殑璋冭瘯杩欎簺闂鎴戣嚜宸便
鍦ㄦ鍏堟劅璋紒
鎰熻阿鎮ㄧ殑涓烘銆
浣曟椂this_row.append(s.cell(row,col))锛堣屼笉鏄痵.cell_value egscell锛夊叏閮ㄥ啓娌℃湁閿欒銆
杈撳嚭涓嶆槸鐗瑰埆鐞嗘兂锛text:u'516-7773167'锛夛紝浣嗗畠閬垮厤浜嗛敊璇紝鍗充娇鏈夐棶棰樼殑瀛楃浠嶇劧鍦ㄨ緭鍑轰腑銆
杩欒涓虹殑鎸戞垬鍙兘鏄湪xlrd姣曠珶銆
鏈枃鍦板潃 锛欳odeGo.net/70034/
-------------------------------------------------------------------------------------------------------------------------
1. 鎴戞湡寰cell_value杩斿洖鍊兼槸unicode瀛楃涓茶繖鏄粰浣犵殑闂锛堣鎵撳嵃鍏type()璇佸疄锛夛紝鍦ㄨ繖绉嶆儏鍐典笅锛屼綘搴旇鑳藉鏀瑰彉杩欎竴琛屾潵瑙e喅杩欎釜闂锛
this_row.append(s.cell_value(row,col))
this_row.append(s.cell_value(row,col).encode('utf8'))
濡傛灉cell_value鏄繑鍥炲涓笉鍚岀殑绫诲瀷锛岄偅涔堜綘闇瑕佸綋涓斾粎褰撳畠杩斿洖涓涓猽nicode瀛楃涓茶繘琛岀紪鐮侊紝鎵浠ヤ綘杩欎釜鍒嗗壊绾挎垚鍑犺锛
val = s.cell_value(row, col)
if isinstance(val, unicode):
val = val.encode('utf8')
this_row.append(val)
浣犻棶鐨勮В閲婏紝浣嗗叾涓湁鑾悕鐨勬病鏈変綘鐨勫府鍔┿
锛堜竴锛夊湪Excel 97涓垱寤虹殑XLS鏂囦欢鐨勫瓧绗︿覆寮濮嬬紪鐮佸湪鎷変竵鏂囧鏋滃彲鑳界殑璇濓紝鍚﹀垯鍦║TF16LE.each瀛楃涓茶繘琛屼竴涓爣蹇 CodeGo.net锛岃鏄庡摢姝ゅ墠鎹滀唬鐮侀〉鈥濇搮闀跨紪鐮佺殑瀛楃涓层傚湪浠讳綍鎯呭喌涓嬶紝xlrd浜х敓鐨剈nicode瀵硅薄銆傝鏂囦欢鐨勭紪鐮佹槸鍙湁鍦╔LS鏂囦欢宸插缓绔嬬敱绗笁鏂硅蒋浠讹紝鏃犺鏄渷鐣ヤ簡浠g爜椤垫垨鍦ㄤ簬瀹冪殑鍏磋叮銆傝鍙傞槄Unicode鑺備簡xlrd鏂囨。鐨勫墠闈
锛堜簩锛夊師鍥犱笉鏄
杩欐浠g爜锛
bcw = csv.writer(bc,csv.excel,b.encoding)
涓嬮潰鐨勯敊璇笌Python 2.5锛2.6鍜3.1锛TypeError: expected at most 2 arguments, got 3-杩欐槸鎴戝鎴慹xpect缁欎笂csv.writer鐨勬枃妗o紝瀹冩湡寰呬竴涓猣ilelike瀵硅薄鍚庨潰鏄紙1锛夋棤锛2锛夋柟瑷鎴栵紙3锛夌殑涓涓垨澶氫釜鏍煎紡鍖栦綘缁欎簡瀹冧竴绉嶆柟瑷锛屽拰csv.writer鏈夎繖涔堝浘绀烘病鏈夌紪鐮併備粈涔堢増鏈殑Python鏄繕鏄綘娌℃湁澶嶅埗/绮樿创锛屼綘灞呯劧璺戣剼鏈紵
锛堜笁锛変笉鏄庡師鍥犵殑杩借釜鍛ㄥ洿鍜屽疄闄呴棶棰樼殑鏁版嵁鏄粈涔堬細
"the_script.py", line 40, in &module&
this_row.append(str(s.cell_value(row,col)))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xed' in position 5: ordinal not in range(128)
棣栧厛锛屾湁涓涓猄TR锛堬級鍦ㄦ湁闂鐨勪唬鐮佽锛岃繖涓嶆槸鍦ㄧ畝鍖栬剼鏈-浣犳病鏈夊鍒/绮樿创锛屼綘灞呯劧璺戣剼鏈紵鍦ㄤ换浣曟儏鍐典笅锛屼綘涓嶈'STR涓鑸-浣犱笉浼氬緱鍒颁綘鐨勫僵杞﹀叏绮惧害;鍙槸璁ヽsv妯″潡杞崲銆
鍏舵锛屼綘璇粹溾濃滅殑鍊间技涔庢槸瓒婃潵瓒婃寕浜嗘槸鈥516-777316鈥-鍦ㄥ師鏉ョ殑Excel宸ヤ綔琛ㄤ腑鐨勬枃鏈负鈥516-7773167鈥滐紙涓庝笂骞村簳7锛夆濃溾--杩欐槸寰堥毦鎯宠薄鐨7濡備綍寰楀埌澶卞幓浜嗘渶鍚庛傛垜鍠滄杩欎釜锛屾壘鍑烘湁闂鐨勬暟鎹紝姝f槸锛
str_value = str(s.cell_value(row, col))
print "row=%d col=%d cell_value=%r" % (row, col, s.cell_value(row, col))
杩欙紖R鍙互淇濆瓨鎮ㄦ墦瀛cell_value=%s ... repr(s.cell_value(row, col))...鍦ㄥ啀鐗堬紙锛変骇鐢熺殑鏁版嵁鐨勪唬琛ㄦс傚涔犲畠銆備娇鐢ㄥ畠銆
浣犳槸濡備綍鍦ㄢ516-777316鈥濆埌杈撅紵
绗笁锛屾槸鍏充簬涓涓猆nicode瀛楃U'\\鍥哄畾鐨勨滃亸绉婚噺5锛堝嵆绗叚涓瓧绗︼級銆 U +00 ED鏄媺涓佸皬鍐欏瓧姣嶆垜鏈夋ユэ紝鑰屼笖娌℃湁浠涔堣兘姣斿緱涓婅繖鏄湪鎵鏈夌殑鈥516-7773167鈥
绗洓锛屼笂杩伴敊璇綅缃技涔庢槸涓涓Щ鍔ㄧ殑鐩爣-浣犲湪鎵杩扮殑瑙e喅鏂规涔嬩竴锛氣滈敊璇槸鍦╞cw.writerow鈥濄傚挦锛
锛堝洓锛変负浠涔堜綘鏄庣櫧鎴戠殑锛堥氳繃str锛堬級锛夛細str(a_unicode_object)灏濊瘯灏唘nicode瀵硅薄杞崲涓簊tr涓殑瀵硅薄锛屽苟鍦ㄦ病鏈変换浣曚娇鐢ˋSCII锛屼絾浣犳湁闈濧SCII鏁版嵁锛屾墍浠ュ浘绀恒傝娉ㄦ剰锛屾偍鐨勭洰鐨勬槸鐢熶骇缂栫爜utf8鐨刢sv鏂囦欢锛屼絾浣犵畝鍖栬剼鏈病鏈夋寜'utf8鐨勪换浣曞湴鏂广
锛堜簲锛夆溾濃... s.cell锛堣锛屽垪锛夛級锛坋gscell浠f浛s.cell_value)鏁翠釜鍐欐病鏈夐敊璇傝緭鍑轰笉鏄壒鍒悊鎯筹紙鏂囧瓧锛歶'516-;锛夆溾濃
杩欐槸鎬庝箞鍥炰簨鐨凜SV浣滃璋冪敤__str__鎮ㄧ殑Cell瀵硅薄鐨勬柟娉曪紝鑰岃繖灏嗕骇鐢&type&:&repr(value)&瀹冨彲浠ヨ繘琛岃皟璇曪紝浣嗗氨鍍忎綘璇寸殑娌℃湁閭d箞澶х殑CSV鏂囦欢銆
锛團锛夌殑浜氬巻椹皵娉板埄鐨勮В鍐虫柟妗堟槸浼熷ぇ鐨勶紝鍥犱负瀹冨緱鍒颁簡浣犲幓銆傜劧鑰岋紝浣犲簲璇ラ槄璇籆ell绫荤殑閮ㄥ垎鍦▁lrd鏂囨。锛氱被鍨嬬殑cell鏄枃鏈紝鏁板瓧锛屽竷灏斿硷紝鏃ユ湡锛岄敊璇紝绌虹櫧鍜岀┖鐧姐傚鏋滀綘鏈夋椂闂达紝浣犱細鎯冲畠浠牸寮忓寲涓烘棩鏈熶笉鏄暟瀛楋紝鎵浠ヤ綘鍙互'isinstance锛堬級锛堟偍鍙兘涓嶅笇鏈涘湪鍑芥暟璋冪敤鐨勫紑閿鍛級...杩欐槸浠涔堟牱鐨Cell.ctype灞炴у拰Sheet.cell_type()鍜Sheet.row_types()鏂规硶瀵广
锛圙锛塙TF8涓嶆槸Unicode銆 UTF16LE涓嶆槸Unicode銆 UTF16鏄笉鏄疷nicode ...鍜屾兂娉曪紝涓汉鐨勫瓧绗︿覆浼氭氮璐2涓瓧鑺傜殑UTF16 BOM澶紝鍗充娇MS鍘绘濊:-)
锛圚锛夋洿澶氶槄璇伙紙闄や簡xlrd鏂囨。锛夛細
CodeGo.net
CodeGo.net
鐪嬭捣鏉ヤ綘鏈2涓棶棰樸
杩樻湁鐨勬悶鐮镐簡鍦ㄨ鍗曞厓鏍-'7'搴旇琚紪鐮佷负u'x37鈥滄垜鎯筹紝鍥犱负瀹冩槸ASCII鐮佺殑鑼冨洿鍐呫
鏇撮噸瑕佺殑鏄紝浣犲緱鍒颁竴涓寚瀹氱殑浜嬪疄锛ascii缂栬В鐮佸櫒涓嶈兘鏄剧ず涓嶅鎮ㄧ殑缂栫爜杞崲鎴恥nicode-瀹冭涓轰綘姝e湪灏濊瘯涓涓艰繘琛岀紪鐮0xed涓嶈兘鐢ˋSCII鏉ヨ〃绀猴紝浣嗕綘璇翠綘鎯充唬琛ㄥ畠浠nicode銆
鎴戞病鏈夎冻澶熺殑鏅烘収鍒跺畾鍑轰粈涔堢壒鍒殑绾跨殑闂-濡傛灉浣犱慨鏀逛綘鐨勯棶棰樻槸浠涔堣鐨勶紝鎴戜篃璁歌兘甯姪澶氫竴鐐癸紙鎴戞兂杩欐槸涓嶆槸this_row.append(s.cell_value(row,col))鎴bcw.writerow(this_row)锛屼絾甯屾湜浣犵‘璁わ級銆
浼间箮鏈変袱绉嶆鐜囥傚叾涓鏄紝浣犳湁娌℃湁鍙兘鏄纭墦寮杈撳嚭鏂囦欢锛
鈥滃鏋渃svfile鏄竴涓枃浠跺璞★紝瀹冨繀椤昏鎵撳紑鐨勫钩鍙颁笂鏄湁宸埆鐨'b'鏍囪銆傗 锛堬級
濡傛灉杩欎笉鏄棶棰橈紝閭d箞鍙︿竴绉嶉夋嫨瀵逛綘鏉ヨ鏄痗odecs.EncodedFile锛堟枃浠讹紝杈撳叆[杈撳嚭[锛岄敊璇痌]锛変綔涓轰竴涓寘瑁呭櫒鏉ヨ緭鍑烘偍鐨凜SV銆傦細
杩欏皢璁╀綘鏈夋枃浠跺璞¤繃婊ゅ櫒浠嶶TF16涓篣TF8銆傝櫧鐒朵袱鑰呭湪鎶鏈笂鈥滅粺涓鈥濓紝瀹冧滑缂栫爜鐨勬柟寮忔槸闈炲父涓嶅悓鐨勩
鍍忚繖鏍凤細
rbc = open('file.csv','w')
bc = codecs.EncodedFile(rbc, "UTF16", "UTF8")
bcw = csv.writer(bc,csv.excel)
鍙互瑙e喅杩欎釜闂瀵逛綘鏉ヨ锛屽亣璁炬垜鐞嗚В姝g‘鐨勯棶棰橈紝骞跺亣璁惧啓鍏ユ枃浠舵椂锛屽紩鍙戦敊璇
鏈枃鏍囬 锛氶氳繃xlrd鐨凱ython-Unicode杞崲涓篣TF8鐨凜SV鏂囦欢
鏈枃鍦板潃 锛欳odeGo.net/70034/
Copyright 漏 2014 CodeGo.netmatlab导入CSV文件_百度知道
matlab导入CSV文件
如何将CSV格式文件里的数据导入到matlab程序中?就是用matlab直接调用CSV里的数据~~~求具体语句~~~
:56% Import the filenewData1 = importdata(DOW; or class &quot.txt);DOW;for i = 1.(vars{i})).txt&quot, newData1???这是matlab插入之后自动产生的:function importfile(fileToRead1)%IMPORTFILE(FILETOREAD1)%
Imports data from the specified file%
FILETOREAD1:59:
file to read%
Auto-generated by MATLAB on 16-Apr-2008 17尝试了import data, vars{i}.txt);;DOW&base'end请问我要如何定义参数? Undefined variable &.vars = fieldnames(newData1);% Create new variables in the base workspace from those fields.要在哪个地方定义dow呢:length(vars)
assignin(&#39,尝试了之后就会提示我Error in ==&gt.txt,比如我插入的文档是DOW; importfile at 9newData1 = importdata(DOW
提问者采纳
Image formats
TIFF - TIFF image
Truecolor.
JPEG - JPEG image
Truecolor or grayscale image.txt&#39.
- Sun raster image
Truecolor or indexed.
- HDF image
Truecolor or indexed image(s).
- Microsoft Wave sound
Sound Sun sound
Sound data and sample rate. 正确的使用方法是; 或者path=&#39.
- Icon image
Indexed image.
Audio formats
- NeXT&#47: Data formats
- MATLAB workspace
VDOW&quot.txt' or class &quot.
- PGM image
G 不过importdata不支持后缀名为txt文件;DOW.
- Comma separated numbers
Double array.
- PPM image
Truecolor image.
- Tab separated text
- Delimited text
Double array.
Spreadsheet formats
- Excel worksheet
Double array and cell array,字符串在matlab中需要加单引号, grayscale or indexed image.txt&quot,所以会出现.
- PNG image
Truecolor?.
- GIF image
Indexed image:newData1 = importdata(&#39.
- PBM image
Grayscale image.
- XWD image
Indexed image.
- Cursor image
InewData1 = importdata(path),其支持的文件后缀有先说一下字符串; matlab便会将DOW.txt不知道是什么东西;? Undefined variable &quot.
- NeXT&#47.txt看成是变量.
- Lotus 123 worksheet
Double array and cell array, grayscale or indexed image(s),但是importdata需要一个包含文件名的字符串变量,你直接使用newData1 = importdata(DOW;Sun sound
Sound data and sample rate?.
Scientific data formats
- Common Data Format
Cell array of CDF records
FITS - Flexible Image Transport System
Primary or extension table data
- Hierarchical Data Format
HDF or HDF-EOS data set
Movie formats
MATLAB movie,但是DOW.
- PCX image
Indexed image.
- BMP image
TruecoDOW.
- Formatted text
importdata D).txt)
提问者评价
非常感谢!我再好好研究研究!o(∩_∩)o...
参考资料:
matlab帮助文档
其他类似问题
为您推荐:
其他1条回答
csv文件里应该只有数据.你的csv文件是怎样的,没有其他任何东西.; Import data菜单里Files -&gt.
csv的相关知识
下载知道APP
随时随地咨询
出门在外也不愁3288人阅读
桌面程序(1)
最近又遇到了需要提供csv下载功能的需求,不同的时需要用java来实现,心想简单,就把以前php的版本重写了一遍,然后生成一份csv,用excel2007打开一看,里面的中文都是乱码,一下就懵了,以前好好的功能怎么突然不行了??以前也一直用2007的啊!于是开始了漫长的google之旅。
看来看去,说的都是输出utf-8格式的csv需要在文件头先输出BOM(BOM不懂的可以google了),即0xEF 0xBB 0xBF三个字节,这样更摸不着头脑了,明明是对的,偏偏不成功,直到发现一个帖子:&,里面提到2007需要装sp3才能识别BOM,shit!原来是这回事!里面同时又提到,用utf-16le编码输出貌似更通用,经测试确实如此,但是utf-16le的BOM是0xFF
0xFE,帖子里面说错了!下面是一个简单的测试结果:
因为条件有限,只测试了这几个版本,可见utf-16le是更通用的编码格式。下面附上java代码,main方法中采用utf-16le编码,最后调用了utf8编码的方法,最后会输出两种编码格式的csv文件:
import java.io.*;
* Created by zhaozhi on 15-5-29.
public class TestCSV {
public static String join(String[] strArr, String delim) {
StringBuilder sb = new StringBuilder();
for(String s : strArr) {
sb.append(s);
sb.append(delim);
if (strArr.length & 1) {
ret = sb.substring(0, sb.length()-1);
ret = sb.toString();
public static
void main (String[] args) throws
Exception {
String[] heads = {&日期&, &产品&, &订单数&};
String[][] rows = {
{&&, &安卓&, &23&},
{&&, &web&, &34&}
byte[] bom = {(byte)0xFF, (byte)0xFE};
String fname = &d:\\utf-16le.csv&;
BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream(fname));
bo.write(bom);
bo.write(join(heads, &\t&).getBytes(&utf-16le&));
bo.write(&\n&.getBytes(&utf-16le&));
for (String[] row : rows) {
bo.write(join(row, &\t&).getBytes(&utf-16le&));
bo.write(&\n&.getBytes(&utf-16le&));
bo.close();
public static void UTF8() throws IOException {
String line = &中文,标题,23&;
OutputStream os = new FileOutputStream(&d:/utf-8.csv&);
os.write(239);
os.write(187);
os.write(191);
PrintWriter w = new PrintWriter(new OutputStreamWriter(os, &UTF-8&));
w.print(line);
w.flush();
w.close();
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:116327次
积分:1561
积分:1561
排名:第17684名
原创:35篇
评论:22条
(1)(1)(1)(3)(1)(1)(2)(1)(6)(3)(1)(2)(1)(2)(1)(1)(2)(1)(1)(1)(1)(1)(1)(1)(1)(1)(8)下次自动登录
现在的位置:
& 综合 & 正文
csv文件出力,excel打开乱码处理
原因如下有两种处理办法:
在做一个导出CSV文件的功能时发现导出的文件是乱码,上网查了下,发现原来是BOM(Byte Order Mark)的问题
BOM是UTF编码方案里用于标识编码的标准标记,在UTF-16里是FF FE,UTF-8里是EF BB BF。这个标记是可选的,因为UTF-8没有顺序,所以它可以被用来检测一个字节流是否是UTF-8编码的。微软做这种检测,但有些软件不做这种检测,而把它当做正常字符处理。
微软在自己的UTF-8格式的文本文件之前加上了EF BB BF三个字节, windows上面的notepad等就是根据这三个字节来确定一个文本文件是ASCII的还是UTF-8的, 然而这个只是微软暗自作的标记, 其它平台上并没有对UTF-8文本文件做个这样的标记,类Unix系统中就没有使用 BOM,因为它会破坏现有的 ASCII 文件的语法约定。
也就是说一个UTF-8文件可能有BOM,也可能没有BOM,那么怎么区分呢?三种方法。1,用UltraEdit-32打开文件,切换到十六进制编辑模式,察看文件头部是否有EF BB BF。2,用Dreamweaver打开,察看页面属性,看“包括Unicode签名BOM”前面是否有个勾。3,用Windows的记事本打开,选择 “另存为”,看文件的默认编码是UTF-8还是ANSI,如果是ANSI则不带BOM。
所谓的unicode保存的文件实际上是utf-16,只不过恰好跟unicode的码相同而已,但在概念上unicode与 utf是两回事,unicode是内存编码表示方案,而utf是如何保存和传输unicode的方案。utf-16还分高位在前 (LE)和高位在后(BE)两种。官方的utf编码还有utf-32,也分LE和BE。非unicode官方的utf编码还有utf-7,主要用于邮件传输。utf-8的单字节部分是和iso-8859-1兼容的,这主要是为了解决一些旧的系统和库函数不能正确处理utf-16的问题,而且对英语字符来说,也节省保存的文件空间(以非英语字符浪费空间为代价)。在iso-8859-1的时候,utf8和iso-8859-1都是用一个字节表示的,当表示其它字符的时候,utf-8会使用两个或三个字节。
第一种比较复杂点,进行转码UTF-16并添加BOM标识信息,如下:
文件下载处理:
fileName = java.net.URLEncoder.encode(fileName, "UTF-8")
.replaceAll("\\+", "%20");
response.setContentType("application/octet-stream");
String temp = "filename=\"" + fileName + "\"";
response.setHeader("Content-disposition", temp);
osDownload = new BufferedOutputStream(response.getOutputStream());
// 出力数据转换为带BOM的16LE编码
byte[] BOM_UTF16 = new byte[] { (byte) 0xFF, (byte) 0xFE };
//context 文件内容:String
byte[] contentByte = context.getBytes("UTF-16LE");
byte[] allData = new byte[BOM_UTF16.length + contentByte.length];
System.arraycopy(BOM_UTF16, 0, allData, 0, BOM_UTF16.length);
System.arraycopy(contentByte, 0, allData, BOM_UTF16.length,
contentByte.length);
osDownload.write(allData);
文件读取处理:
int column = 1;
//文件读取、文件读取指定编码
InputStreamReader reader = new InputStreamReader(form.getFile()
.getInputStream(),"UTF-16LE");
//文件流读取对象创建
BufferedReader buf = new BufferedReader(reader);
String line = "";
while ((line = buf.readLine()) != null) {
line = line.replace("\"","");
if(line.length() == 0||line.replaceAll("\t","").length() == 0){
byte utf_16 [] = line.getBytes("UTF-16LE");
UTF-16LE编码
1,2值为-1,-2
if(utf_16[0] == -1 && utf_16[1] == -2){
line = new String(line.getBytes("UTF-16LE"),2,
line.getBytes("UTF-16LE").length - 2,"UTF-16LE");
// 按指定分隔符分割处理
String[] st = new String(line.getBytes(),"UTF-8").split("\t");
// 列数,内容等等处理
if (st.length == 15)
//文件内容CHECK
buf.close();
第二种方法简单点,只需添加UTF-8的BOM信息即可,
在Struts的Action里用流生成CSV文件的时候,在一开始就加上这样一句
1.out = response.getOutputStream();
2.//加上UTF-8文件的标识字符
3.out.write(new byte[]{(byte)0xEF,(byte)0xBB,(byte)0xBF});
当然了,因为加有BOM信息,csv在读取操作的时候,也要做“删除”BOM信息操作。
byte utf[] = line.getBytes();
//BOM 処理 -17, -69, -65
if(utf[0] == -17 && utf[1] == -69 && utf[2] == -65){
line = new String(utf,3,utf.length - 3);
╭︿︿︿╮
︶ ︶︶:&XX操作系统下& CSV 文件出力 用excel打开乱码
PS:小弟惭愧,最开始使用的处理方法为第一种,后来因同事提醒,才有了现在第二种处理方法,⊙﹏⊙b汗。。。
&&&&推荐文章:
【上篇】【下篇】

我要回帖

更多关于 kattle webservice 的文章

 

随机推荐