Что нового

Неправильная кодировка в имени группы ListView

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
У меня на виртуальной системе (Win 7 x64 Rus), название группы в ListView отображается вопросами (?????), а пункты (в той же кодировке - UTF-8), отображаются нормально.

Вот скрипт:

Код:
#include <GUIListView.au3>
#include <GUIConstantsEx.au3>

$hGUI = GUICreate('Test Script', 300, 300)

$iLV = GUICtrlCreateListView('Col', 20, 20, 260, 260)

;Эти строчки читаются из файла в кодировке UTF-8 with signature
$sGroup = 'Группа'
$sItem = 'Пункт'

_GUICtrlListView_EnableGroupView($iLV)
$iIndex = _GUICtrlListView_AddItem($iLV, $sItem)
_GUICtrlListView_InsertGroup($iLV, -1, 1, $sGroup)
_GUICtrlListView_SetItemGroupID($iLV, $iIndex, 1)

GUISetState(@SW_SHOW, $hGUI)

While 1
	$nMsg = GUIGetMsg()
	
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd


На моей же системе, точно такой же только x86, название группы отображается нормально.
Я начал проверять в чём дело, и выяснил, что на виртуальной машине, данную проблему можно исправить если в функции _GUICtrlListView_InsertGroup добавить 65001 в качестве второго параметра у вызова _WinAPI_MultiByteToWideChar. Но тогда на моей системе данный трюк как раз искажает название группы (там отображаются символьные вопросы).

Возможно нужно как то определять кодовую страницу системы (второй параметр в вышеупомянутой функции за это и отвечает), чтобы исправить данную проблему на обеих системах? :scratch:

Мне кажется это баг в функции _GUICtrlListView_InsertGroup, там при получении структуры данных не учитывается юникод...
 
Верх