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 + "",");
  • 相关阅读:
    torch.optim.SGD()各参数的解释
    pytorch中y.data.norm()的含义
    sklearn分类模块
    python处理nii文件
    cvpr2019_Unsupervised Person Re-identification by Soft Multilabel Learning
    attention机制
    contrastive loss
    pytorch扩展——如何自定义前向和后向传播
    python | 实现多行向量(matrix)两两计算余弦距离、欧几里德距离
    判定是否过拟合、欠拟合的一种方式
  • 原文地址:https://www.cnblogs.com/yansc/p/15352336.html
Copyright © 2011-2022 走看看