私はGDALの助けが必要です。中国記号の文字列値が正しく読み込まれたり保存されたりしません(C#)。我々が使用SAVINGグリッド値についてGDAL GDALRATSetValueAsString()中国語の文字を保存する方法(C#)?
:
プライベート静的にexternボイドGDALRATSetValueAsStringを(のIntPtrは、文字列値[MarshalAs(UnmanagedType.LPStr)] [IN] INT列、int型のフィールドを、ハンドル)。文字列値を保存するには メソッド(C#)を使用すると、このメソッドは文字列をANSI文字列として保存するようです。読書のための
:
private static extern IntPtr GDALRATGetValueAsString(IntPtr handle, int row, int field);
で。例私の文字列「银行Flamwood C2」 方法は、ポインタ(GDALRATGetValueAsStringメトでの使用)で値を取得するためにあります:
var pointer = GDALRATGetValueAsString(GDALRasterAttributeTableH, row, field);
a) var b = Marshal.PtrToStringUni(pointer); // value: "㼿汆浡潷摯䌠2"
b) var a = Marshal.PtrToStringAnsi(pointer); // value: "??Flamwood C2"
c) var c = Marshal.PtrToStringAuto(pointer); // value: "㼿汆浡潷摯䌠2"
d) var d = Marshal.PtrToStringBSTR(pointer); //Throws an error out of memory.
Q:それでは、どのように私はUnicode文字列を取得することができます保存されていた(ので、私が使用して得ることができますこのMarshal.PtrToStringUni(ポインタ))またはおそらくユニコード文字列をGDALRAT(GDAL RAT-GDALラスタ属性テーブル)に保存する方法はありますか?
GDALのバージョン:1.11.1
私はのCharSet = CharSet.Unicodeを設定しようとしましたが、IDは、まだ取得正しくない文字列を助けていません:任意の助け
[DllImport(GdalWrapper.GdalDLL, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
private static extern void GDALRATSetValueAsString(IntPtr handle, int row, int field, [In][MarshalAs(UnmanagedType.LPStr)] string value);
感謝を。
P.S.文字列をUnicode文字列として保存するには、GDALソースファイルを再度ビルドする必要がある場合は、どのビルドパラメータを設定する必要がありますか?
このリンクはhttps://trac.osgeo.org/gdal/wiki/rfc5_unicodeにあります。たぶん、簡単な方法があります(この記事は5年前に書かれました...)? – Drasius
またチケットを作成しました:https://trac.osgeo.org/gdal/ticket/6168#ticket – Drasius
あなたの解決策を貼り付けてください –