Мне нужна помощь с GDAL. Строковое значение с китайскими символами не корректно считывается/сохраняется (С#).
Для сохранения значения сетки мы используем:
private static extern void GDALRATSetValueAsString (дескриптор IntPtr, int row, int field, [In] [MarshalAs (UnmanagedType.LPStr)] строковое значение);
метод (С#), чтобы сохранить строковое значение, кажется, что этот метод сохраняет строку как строку 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(указатель)) или, скорее всего, , как сохранить строку Unicode в 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. Если исходные файлы GDAL необходимо снова построить для сохранения строки в виде строки в Юникоде, то какие параметры сборки и где должны быть установлены?