Заставьте программы Haskell использовать локаль UTF8 под вином

Я пытаюсь использовать GHC для вина, чтобы создать одно из моих приложений Haskell для Windows. Пока это работает хорошо, но я застрял на запуске своего набора тестов, который предназначен для запуска в локали UTF8 (например, LANG=C.utf8).

К сожалению, под Wine среда выполнения Haskell всегда считает, что я хочу использовать кодовую страницу, отличную от Unicode:

$ wine ghc -e 'GHC.IO.Encoding.CodePage.localeEncoding'
CP850
$ LANG=C.utf8 wine ghc -e 'GHC.IO.Encoding.CodePage.localeEncoding'
CP437
$ LC_ALL=C.utf8 wine ghc -e 'GHC.IO.Encoding.CodePage.localeEncoding'
CP437

Помимо изменения фактического кода, чтобы установить кодировку всех дескрипторов: как мне заставить программу Haskell использовать здесь UTF-8 (т.е. кодовую страницу 65001)?


person Joachim Breitner    schedule 15.10.2015    source источник
comment
Вы можете найти этот альтернативный способ установки переменных среды полезным. Если, конечно, окружающая среда имеет к этому какое-то отношение. winehq.org/docs/wineusr-guide/environment-variables   -  person dfeuer    schedule 15.10.2015
comment
У меня нет оснований полагать, что переменные окружения влияют на кодовую страницу — к сожалению.   -  person Joachim Breitner    schedule 15.10.2015
comment
Кроме того, вы пробовали более сильный LC_ALL вместо LANG? Я просто бросаю догадки здесь.   -  person dfeuer    schedule 15.10.2015
comment
да. Исправлен вопрос для полноты.   -  person Joachim Breitner    schedule 15.10.2015
comment
Поможет ли запуск набора тестов через пакетный файл Windows, который устанавливает кодовую страницу?   -  person Ørjan Johansen    schedule 16.10.2015
comment
@ØrjanJohansen: Возможно, но как мне его установить? Насколько я могу судить, chcp недоступен в WINE.   -  person Joachim Breitner    schedule 16.10.2015
comment
Ой. Тогда я тоже не знаю. Я обнаружил одну маленькую вещь: Wine docs рекомендует всегда писать суффикс в официальной форме UTF-8.   -  person Ørjan Johansen    schedule 16.10.2015


Ответы (2)


У меня здесь нет установки Wine/Haskell, так что отнеситесь к этому с большой долей скептицизма. Он выглядит GHC.IO.Encoding. имеет то, что может быть правильным для этого:

setLocaleEncoding :: TextEncoding -> IO () 
utf8 :: TextEncoding

Вы можете попробовать сделать свои тестовые программы setLocaleEncoding utf8 до того, как они начнут работать. Это не совсем то, что вы хотели, но если это работает, это кажется проще, чем устанавливать его отдельно для каждой ручки.

person dfeuer    schedule 15.10.2015
comment
Спасибо. Мне бы очень хотелось что-то, что не изменяет код, чтобы я мог протестировать программу, как если бы она работала на компьютере пользователя с включенным utf8. Я продолжу искать. - person Joachim Breitner; 16.10.2015

Я не знаю, работает ли это для Wine, но пробовали ли вы использовать команду CHCP для установки текущей кодовой страницы Windows?

person MathematicalOrchid    schedule 16.10.2015
comment
Это то, что я рекомендую своим пользователям на реальных окнах. К сожалению, эта команда недоступна в WINE. - person Joachim Breitner; 16.10.2015
comment
Жаль... Ну что же, стоило попробовать! - person MathematicalOrchid; 16.10.2015