GDAL读写dxf文件中文乱码问题解决方法(二)
2013-04-03 17:35
961 查看
1 写DXF中文乱码问题解决方法
在这篇文章(/article/9699902.html)中,说明了如何解决写DXF文件中文乱码问题,但是有时会引起DXF文件使用AutoCAD打不开,提示:DXF 读取错误 第 141003 行。
DXF 输入无效或不完整 -- 图形被放弃。
使用记事本打开dxf文件会发现,转码发生错误:
将 中国 两个汉字转为了 謀U+0439? 后面多了 ?
要解决问题,于是读取其源码,发现在ogrdxfwritelayer.cpp文件中,WriteTEXT()函数中,代码第484-489行,有如下代码:
/* -------------------------------------------------------------------- */ /* Escape the text, and convert to ISO8859. */ /* -------------------------------------------------------------------- */ const char *pszText = poLabel->TextString( bDefault ); if( pszText != NULL && !bDefault ) { CPLString osEscaped = TextEscape( pszText ); WriteValue( 1, osEscaped ); }
在写注记值的时候,进行了TextEscape处理,将字符串转为了ISO8859,既然我们使用的是中文版cad,中文版系统,干脆注释掉TextEscape,修改代码如下:
/* -------------------------------------------------------------------- */ /* Escape the text, and convert to ISO8859. */ /* -------------------------------------------------------------------- */ const char *pszText = poLabel->TextString( bDefault ); if( pszText != NULL && !bDefault ) { // CPLString osEscaped = TextEscape( pszText ); WriteValue( 1, pszText ); }
重新编译GDAL1.9.2。(不过修改之前,也要进行文章/article/9699902.html中的操作)。
2 读DXF中文乱码问题解决方法
下面我们解决读dxf出现的中文乱码问题:读文件出现中文乱码,也是GDAL/OGR内部进行了转码。我们查看ogrdxflayer.cpp中,读取注记的函数TranslateMTEXT()和TranslateTEXT()函数,在TranslateMTEXT()中,也就是cpp文件中第449-454行代码,如下:
case 1: case 3: if( osText != "" ) osText += "\n"; osText += TextUnescape(szLineBuf); break;
可以看到也进行了转码,TextUnescape函数将ISO8859转为UTF8编码。我们修改代码为:
case 1: case 3: if( osText != "" ) osText += "\n"; osText += CPLString (szLineBuf); break;
在TranslateTEXT()函数中,第638-645行代码,如下:
/* -------------------------------------------------------------------- */ /* Translate text from Win-1252 to UTF8. We approximate this */ /* by treating Win-1252 as Latin-1. */ /* -------------------------------------------------------------------- */ osText.Recode( poDS->GetEncoding(), CPL_ENC_UTF8 ); poFeature->SetField( "Text", osText );
修改如下:
/* -------------------------------------------------------------------- */ /* Translate text from Win-1252 to UTF8. We approximate this */ /* by treating Win-1252 as Latin-1. */ /* -------------------------------------------------------------------- */ //osText.Recode( poDS->GetEncoding(), CPL_ENC_UTF8 ); poFeature->SetField( "Text", osText );
重新编译GDAL1.9.2。
搞定!
相关文章推荐
- GDAL写dxf文件中文乱码问题解决方法
- php使用fputcsv()函数csv文件读写数据的方法(解决中文乱码问题)
- eclipse中 property文件中文乱码问题解决方法
- python csv 格式文件 中文乱码问题解决方法
- JAVA之NIO按行读写大文件,完美解决中文乱码问题
- Java读写txt文件时防止中文乱码问题出现的方法介绍
- CCS6中文件出现中文乱码问题解决方法
- Java 解决读写本地文件中文乱码的问题
- Java读写.properties文件实例,解决中文乱码问题
- spring boot使用i18n时properties文件中文乱码问题的解决方法
- Java读properties文件中文乱码问题的解决方法
- Java读写.properties文件解决中文乱码问题
- CodeMan的Linux问题解决集锦:Linux打开阅读chm文件和解决chm中文乱码的方法
- mysql导入导出数据中文乱码解决方法小结(1、navicat导入问题已解决,创建连接后修改连接属性,选择高级->将使用Mysql字符集复选框去掉,下拉框选择GBK->导入sql文件OK;2、phpmyadmin显示乱码的问题也解决,两步:1.将sql文件以utf8的字符集编码另存,2.将文件中sql语句中的字段字符集编码改成utf8,导入OK)
- Java读写.properties文件实例,解决中文乱码问题
- CodeMan的Linux问题解决集锦:Linux打开阅读chm文件和解决chm中文乱码的方法
- 【转】python csv 格式文件 中文乱码问题解决方法
- Java读properties文件中文乱码问题的解决方法