diff options
author | mdankov <mdankov@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2014-04-01 21:36:51 +0000 |
---|---|---|
committer | mdankov <mdankov@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2014-04-01 21:36:51 +0000 |
commit | c2d8b43e88a6a391e02e4e79bae7b0402b992149 (patch) | |
tree | 7dc42d08fbb627de4497b762c931f3397d8bebea /navit/map | |
parent | 7f31dfc599a3685cffda3b25333842bb6e2a608a (diff) | |
download | navit-c2d8b43e88a6a391e02e4e79bae7b0402b992149.tar.gz |
Fix:map_csv:Default to utf-8 encoding. Use proper encoding to write csv file.
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@5765 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/map')
-rw-r--r-- | navit/map/csv/csv.c | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/navit/map/csv/csv.c b/navit/map/csv/csv.c index c69910b06..57e941e1b 100644 --- a/navit/map/csv/csv.c +++ b/navit/map/csv/csv.c @@ -145,10 +145,20 @@ save_map_csv(struct map_priv *m) } ++at; } - if(fprintf(fp,"%s\n", csv_line)<0) { + + if(m->charset) { + tmpstr=g_convert(csv_line, -1,m->charset,"utf-8",NULL,NULL,NULL); + if(!tmpstr) + dbg(0,"Error converting '%s' to %s\n",csv_line, m->charset); + } else + tmpstr=csv_line; + + if(tmpstr && fprintf(fp,"%s\n", tmpstr)<0) { ferr = 1; } g_free(csv_line); + if(m->charset) + g_free(tmpstr); } if(fclose(fp)) { @@ -655,7 +665,7 @@ csv_create_item(struct map_rect_priv *mr, enum item_type it_type) static struct map_methods map_methods_csv = { projection_mg, - "iso8859-1", + "utf-8", map_destroy_csv, map_rect_new_csv, map_rect_destroy_csv, @@ -734,7 +744,6 @@ map_new_csv(struct map_methods *meth, struct attr **attrs, struct callback_list m->flags=flags->u.num; *meth = map_methods_csv; - meth->charset=m->charset; data=attr_search(attrs, NULL, attr_data); @@ -752,14 +761,18 @@ map_new_csv(struct map_methods *meth, struct attr **attrs, struct callback_list /*if column number is wrong skip*/ if((fp=fopen(m->filename,"rt"))) { const int max_line_len = 256; - char *line=g_alloca(sizeof(char)*max_line_len); + char *linebuf=g_alloca(sizeof(char)*max_line_len); while(!feof(fp)) { - if(fgets(line,max_line_len,fp)) { - char*line2; - char* delim = ","; + if(fgets(linebuf,max_line_len,fp)) { + char *line=g_convert(linebuf, -1,"utf-8",m->charset,NULL,NULL,NULL); + char *line2=NULL; + char *delim = ","; int col_cnt=0; - char*tok; - + char *tok; + if(!line) { + dbg(0,"Error converting '%s' to utf-8 from %s\n",linebuf, m->charset); + continue; + } if(line[strlen(line)-1]=='\n' || line[strlen(line)-1]=='\r') { line[strlen(line)-1] = '\0'; } @@ -840,6 +853,7 @@ map_new_csv(struct map_methods *meth, struct attr **attrs, struct callback_list else { dbg(0,"ERROR: Non-matching attr count and column count: %d %d SKIPPING line: %s\n",col_cnt, attr_cnt,line); } + g_free(line); g_free(line2); } } |