Я пытаюсь получить название культуры для локали, которая в данный момент установлена в панели управления региональными настройками, используя GetUserDefaultLocaleName . Тем не менее, я не получаю ожидаемых результатов, когда я передаю StringBuilder в качестве параметра.
static class NativeMethods
{
[DllImport("kernel32.dll")]
public static extern int GetUserDefaultLocaleName(StringBuilder buf, int bufferLength);
}
static void Main(string[] args)
{
const int nChars = 256;
var sb = new StringBuilder(nChars);
int cultureNameLength = NativeMethods.GetUserDefaultLocaleName(sb, nChars);
string cultureName = sb.ToString();
Console.WriteLine(cultureName);
Console.ReadLine();
}
Если моя текущая культура установлена на «en-US», при запуске кода, CultureName устанавливается в «e» (только первая буква текущей культуры), но cultureNameLength установлено в 6 (что ожидается для строки с нулевым окончанием «en-US \ 0»)
Почему при этом возвращается только первое буква названия культуры (я также проверял другие культуры и "fr-FR" возвращает "f")? Есть ли другая структура данных, которую я могу передать вместо StringBuilder, чтобы она успешно возвращала имя культуры?