Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Haskell] кириллица 
V
    Опции темы
Artemios
Дата 18.1.2007, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: нет
Всего: 50



Haskell и кириллица -- есть ли возможность как-нибудь подружить, кроме как таким способом:
Код

map chr [1042, 1099, 1088, 1077, 1079, 1072, 1090, 1100]

Когда пытаюсь просто в кавычках записать строку с кириллицей -- компилятор (ghc) ругается на лексическую ошибку.

Это сообщение отредактировал(а) Artemios - 18.1.2007, 01:36


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
DrDred
Дата 18.1.2007, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 14.9.2006
Где: Земля

Репутация: нет
Всего: 2



Счас проверил ghc 6.4.2 - если файл сохранен в UTF-8 то все нормально... правда т.к. консоль не юникодная, то пользы от этого маловато smile
PM MAIL WWW ICQ   Вверх
Artemios
Дата 18.1.2007, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: нет
Всего: 50



Странно... Вся система utf-8, включая и консоль.
SuSE Linux 10.1
ghc-6.4.2
Что получается:
Цитата

~> cat > test1.hs

main = print "Tralala"


~> ghc --make ./test1.hs -o test1

Chasing modules from: ./test1.hs
Compiling Main             ( ./test1.hs, ./test1.o )
Linking ...

~> ./test1

"Tralala"

~> cat > test2.hs

main = print "Траляля"


~> ghc --make ./test2.hs -o test2

Chasing modules from: ./test2.hs
Compiling Main             ( ./test2.hs, ./test2.o )

./test2.hs:1:18: lexical error in string/character literal

~>    


Добавлено @ 13:38 
P.S. пакет с ghc качал с PACKMAN-а, может у них он собран без поддержки юникода?

Это сообщение отредактировал(а) Artemios - 18.1.2007, 15:04


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
DrDred
Дата 18.1.2007, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 14.9.2006
Где: Земля

Репутация: нет
Всего: 2



а cat точно создает utf-8 файл? Про Linux сказать ничего не могу, т.к. тестировал под Виндой...
PM MAIL WWW ICQ   Вверх
Artemios
Дата 18.1.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: нет
Всего: 50



Цитата(DrDred @  18.1.2007,  14:22 Найти цитируемый пост)
а cat точно создает utf-8 файл?

угу. Он писал в файл то, что я вводил с консоли, а в консоли utf. На всякий случай проверил -- действительно utf.

Цитата(Artemios @  18.1.2007,  13:33 Найти цитируемый пост)
P.S. пакет с ghc качал с PACKMAN-а, может у них он собран без поддержки юникода? 

попробовал бинарники от разработчиков с офф. сайта -- та же беда.
Приду домой, в Винду попробую загрузиться, там еще посмотрю... Хотя, для cp1251 там проверял -- также не хотело...
Но не может же быть такого, чтоб под виндой была поддержка, а под *nix -- нет?

DrDred, а у тебя откуда дистрибутив?


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
DrDred
Дата 18.1.2007, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 14.9.2006
Где: Земля

Репутация: нет
Всего: 2



Черт, извиняюсь похоже прогнал с utf-8 smile не ту версию файла скопмилировал.... 
А вот с cp1251 все хорошо... Брал дистрибутив с haskell.org, вроде ничего не докручивал...
PM MAIL WWW ICQ   Вверх
Artemios
Дата 18.1.2007, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: нет
Всего: 50



Опа...
Я похоже тоже прогнал:
Цитата(Artemios @  18.1.2007,  15:00 Найти цитируемый пост)
Хотя, для cp1251 там проверял -- также не хотело...

и наверно тот же utf-8 в Винде компилировал...

Сейчас под Linux-ом попробовал koi8-r -- все замечательно собирается и запускается smile
Цитата

~> recode utf8..koi8r < ./test2.hs > ./test3.hs

~> ghc --make ./test3.hs -o ./test3

Chasing modules from: ./test3.hs
Compiling Main             ( ./test3.hs, ./test3.o )
Linking ...

~> ./test3

"\244\210\193\204\209\204\209"

~>       

Значит, вопрос не в кириллице, а в поддержке юникода.

Это сообщение отредактировал(а) Artemios - 18.1.2007, 17:14


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
Artemios
Дата 23.1.2007, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: нет
Всего: 50



Вообще, вопрос темы возник по следующему поводу:
начал баловаться с построение ГУИ с использованием библиотеки gtk2hs
Тут выяснилось, что строки с не-ascii символами GTK кушает в юникоде.

Решил: если гора не идет к Магомеду -- Магомед идет к горе. Написал скриптик (если кому нужен -- присоединяю к сообщению), который разбирает программу на Haskell и заменяет строки, содержащие не-ascii символы, на представление вида (map chr [список hex-значений символов в юникоде]). Теперь могу писать в любой кодировке и использовать любые строки, а после обработки скриптом все замечательно компилируется и работает хоть в Линуксе, хоть в Винде.
Скрипт писал на Python -- соответственно понимает все кодировки, что понимает питон (а это если и не все, то большинство ныне используемых кодировок). В большинстве дистрибутивов линукса питон установлен по умолчанию, под виндусом пробовал с установленным питоном, но при желании можно собрать и независимый от питона экзешник.

Ниже привожу пример использования (скрипт назвал notascii2haskell smile ), за свой хилый английский извиняюсь.
Цитата

~> ./notascii2haskell --help

notascii2haskell - converts Haskell programs with strings in various not-ascii character sets
        to programs with 'gtk2hs'-understandable replacements for strings


Usage:  notascii2haskell [ENCODING] [INFILE [OUTFILE]]
                        ENCODING - encoding of input characters, on default encoding of current locale used
                        INFILE - input file name, on default stdin stream used
                        OUTFILE - output file name, on default stdout stream used

        notascii2haskell --help         show help message
        notascii2haskell --all-enc      show all supported encodings (with aliases)


~> cat > ./RButton.hs
module Main (main) where

import Graphics.UI.Gtk
import Data.Char

main :: IO ()
main = do
  initGUI
  window <- windowNew
  button <- buttonNewWithLabel "Кириллическая кнопка"
  set window [ containerChild := button ]
  button `onClicked` mainQuit
  window `onDestroy` mainQuit
  widgetShowAll window
  mainGUI


~> ./notascii2haskell ./RButton.hs
module Main (main) where

import Graphics.UI.Gtk
import Data.Char

main :: IO ()
main = do
  initGUI
  window <- windowNew
  button <- buttonNewWithLabel (map chr [0x41a,0x438,0x440,0x438,0x43b,0x43b,0x438,0x447,0x435,0x441,0x43a,0x430,0x44f,0x20,0x43a,0x43d,0x43e,0x43f,0x43a,0x430])
  set window [ containerChild := button ]
  button `onClicked` mainQuit
  window `onDestroy` mainQuit
  widgetShowAll window
  mainGUI

~> ./notascii2haskell ./RButton.hs ./RB.hs
~> ghc --make ./RB.hs -o ./RB
Chasing modules from: ./RB.hs
Compiling Main             ( ./RB.hs, ./RB.o )
Linking ...
~> ./RB

и после выполнения последней строчки имею окошко с кнопкой:
user posted image

Предложения по дополнению/улучшению принимаются smile

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  notascii2haskell 2,25 Kb


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
Laughedelic
Дата 11.10.2007, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 11.10.2007

Репутация: нет
Всего: нет



у меня такая же проблема с кириллицей в Хаскелле.
кроме этого скрипта никто не придумал, других решений?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума «Функциональные языки: общие вопросы»
Void
  • Пожалуйста, создавайте темы с содержательными названиями. Если у Вас вопрос по конкретному языку, укажите его в заголовке, например: «[Haskell] Как использовать монаду State».
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Функциональные языки: общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0754 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.