1、注册后配置encoding
OSGeo.GDAL.Gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");//我没有用到中文路径暂时没测试
OSGeo.GDAL.Gdal.SetConfigOption("SHAPE_ENCODING", ""); //一定要空着
2、重写Gdal的读:注意gdal203 这个要根据实际的版本号修改
[DllImport("gdal203.dll", EntryPoint = "OGR_F_GetFieldAsString", CallingConvention = CallingConvention.Cdecl)]
public extern static System.IntPtr OGR_F_GetFieldAsString(HandleRef handle, int i);
/// <param name="fe">当前要素</param>
/// <param name="index">索引</param>
/// <returns></returns>
public static String getRightStr(Feature fe, int index)
{
IntPtr pNativeData = OGR_F_GetFieldAsString(OSGeo.OGR.Feature.getCPtr(fe), index);
if (pNativeData == IntPtr.Zero)
return null;
string s = Marshal.PtrToStringAnsi(pNativeData);
return s;
}
调用: var xx = getRightStr(feat, feat.GetFieldIndex(tezhengName));
var xx = getRightStr(feat, index);
3、重写Gdal的写入:
[DllImport("gdal203.dll", EntryPoint = "OGR_F_SetFieldString", CallingConvention = CallingConvention.Cdecl)]
public extern static void OGR_F_SetFieldString(HandleRef handle, int index,string val);
/// <param name="fe"></param>
/// <param name="index">索引</param>
/// <param name="val">值</param>
public static void setFieldString(Feature fe,int index,string val)
{
//说白了封装C#版本的时候做了一层UTF8的转换,应该是却是字符了、这样直接调用底层
OGR_F_SetFieldString(OSGeo.OGR.Feature.getCPtr(fe), index, val);
}
调用:setFieldString(poFeature, j, value);