Potrzebuję pomocy z GDAL. Wartość łańcucha z chińskimi symbolami nie jest poprawnie odczytana/zapisana (C#).GDAL GDALRATSetValueAsString() jak zapisać chińskie znaki (C#)?
Na wartość siatki LETNI używamy:
private static extern void GDALRATSetValueAsString (IntPtr uchwyt, int wiersz, int polu [W] [MarshalAs (UnmanagedType.LPStr)] wartość string); metoda (C#), aby zapisać wartość ciągu, wydaje się, że ta metoda zapisuje ciąg jako ANSI string.
do odczytu:
private static extern IntPtr GDALRATGetValueAsString(IntPtr handle, int row, int field);
In. Przykład mój ciąg „银行 Flamwood C2” Nie jest dla metod, aby uzyskać wartości przez wskaźnik (zastosowanie w GDALRATGetValueAsString meto):
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.
P: W jaki sposób można uzyskać ciąg Unicode z został uratowany (tak mogę dostać za pomocą ten Marshal.PtrToStringUni (wskaźnik)) lub najprawdopodobniej jak zapisać ciąg Unicode do GDALRAT (GDAL RAT - GDAL Tabela atrybutów rastrowych)?
wersja GDAL: 1.11.1
Próbowałem ustawić charset = CharSet.Unicode ale id nie pomogło, wciąż nie prawidłowy ciąg:
[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);
Dzięki za wszelką pomoc.
P.S. Jeśli pliki źródłowe GDAL muszą zostać ponownie skompilowane, aby zapisać ciąg jako ciąg znaków Unicode, to jakie parametry kompilacji i gdzie należy ustawić?
Znaleziono ten link: https://trac.osgeo.org/gdal/wiki/rfc5_unicode. Być może jest to metoda łatwa (ten artykuł został napisany 5 lat temu ...)? – Drasius
Utworzony bilet: https://trac.osgeo.org/gdal/ticket/6168#ticket – Drasius
wkleić swoje rozwiązanie –