zoukankan      html  css  js  c++  java
  • gdal字符编码

    首先确认vs 中字符编码:也就是说,vs里 Encoding的 default=GBK

     

     中  用两个字节存储,十进制 214, 208 = 十六进制  D6 D0

     https://tool.lu/hexconvert/

     转换成 utf-8编码:即为十进制 228 184 173 = 十六进制 e4 b8 ad

     https://www.qqxiuzi.cn/bianma/zifuji.php

      

     转换回来,当然还是 中 字

    GDAL里

            [DllImport("gdal303.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)
            {
                OGR_F_SetFieldString(OSGeo.OGR.Feature.getCPtr(fe), index, val);
            }

      

    获取字段属性值的乱码解决:

            [DllImport("gdal303.dll", EntryPoint = "OGR_Fld_GetNameRef", CallingConvention = CallingConvention.Cdecl)]
            public extern static System.IntPtr OGR_Fld_GetNameRef(HandleRef handle);
    
    
            [DllImport("gdal303.dll", EntryPoint = "OGR_F_GetFieldAsString", CallingConvention = CallingConvention.Cdecl)]
            public extern static System.IntPtr OGR_F_GetFieldAsString(HandleRef handle, int index);
    
            [DllImport("gdal303.dll", EntryPoint = "OGR_F_GetFieldAsBinary", CallingConvention = CallingConvention.Cdecl)]
            public extern static System.IntPtr OGR_F_GetFieldAsBinary(HandleRef handle, int index, out int byteCount);
            [DllImport("gdal303.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>
            /// <returns></returns>
            public static String getFieldAsStr(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;
            }
    
            /// <param name="fe"></param>
            /// <param name="index">索引</param>
            /// <param name="val"></param>
            public static void setFieldString(Feature fe, int index, string val)
            {
                OGR_F_SetFieldString(OSGeo.OGR.Feature.getCPtr(fe), index, val);
            }
    var field3 = f.GetFieldAsString(i);//这种直接获取出来的是gbk的乱码
    
    
        var field = getFieldAsStr(f, i);
        var bytes2 = System.Text.Encoding.Default.GetBytes(field);
        var sss = System.Text.Encoding.UTF8.GetString(bytes2);//同上。少一些字
    
    用下面方法,实验可以
        //string fieldName = pFieldDefn.GetName();
        //int fieldIndex = pFeatureDefn.GetFieldIndex(fieldName);
        //IntPtr pIntPtr = OGR_F_GetFieldAsString(OSGeo.OGR.Feature.getCPtr(pFeature), fieldIndex);
        int byteCount = 0;
        IntPtr pIntPtr = OGR_F_GetFieldAsBinary(OSGeo.OGR.Feature.getCPtr(f), i, out byteCount);
        byte[] byteArray = new byte[byteCount];
        Marshal.Copy(pIntPtr, byteArray, 0, byteCount);
        string str = System.Text.Encoding.UTF8.GetString(byteArray);
    
        sb.Append(""" + key + "":"" + str + "",");
  • 相关阅读:
    bzoj 1030: [JSOI2007]文本生成器
    hdu 2222 Keywords Search
    poj 2406 Power Strings
    poj 2752 Seek the Name, Seek the Fame
    ASP.NET中WebForms简介与搭建HelloWorld项目
    VisualStudio2017中新建项目没有Asp.Net项目
    C#中导出百万级Excel只需几秒除了NPOI还可以这样
    Winform中实现双击Dev的TreeList在ZedGraph中生成对应颜色的曲线
    Winform中设置ZedGraph在生成多条曲线时随机采用不同的颜色
    DevExpress的TreeList实现自定义节点NodeCell的背景颜色和前景色
  • 原文地址:https://www.cnblogs.com/yansc/p/15352336.html
Copyright © 2011-2022 走看看