Помогите. Кодировка.

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Помогите. Кодировка.

dymko
Помогите, плз, новичку.
Не могу понять как вообще работать с кодировкой utf-8. Как настроить,
что загрузить и т.д.
Пытался разобраться посредством этой страницы:
http://www.gnu.org/software/smalltalk/manual/html_node/Locales.html
Но результат нулевой.
Точнее не совсем нулевой, а сложилось впечатление, что нормальная
работа с данной кодировкой не предусмотрена.

Интересуют вполне обыденные вещи, такие как: получение символа по
индексу, получение длины строки и т.п.
Это вообще реально?

P.S.
ОС: Фрибсд 8.0
ST: GNU ST 3.2

--
http://groups.google.ru/group/sugr
Reply | Threaded
Open this post in threaded view
|

Re: Помогите. Кодировка.

Dmitry Matveev
Привет,

17.07.10, dymko<[hidden email]> написал(а):
> Не могу понять как вообще работать с кодировкой utf-8. Как настроить,
> что загрузить и т.д.

PackageLoader fileInPackage: #I18N.

> Точнее не совсем нулевой, а сложилось впечатление, что нормальная
> работа с данной кодировкой не предусмотрена.

На самом деле всё не так уж плохо :) Только регекспы с юникодными
строками в GNU Smalltalk не работают

> Интересуют вполне обыденные вещи, такие как: получение символа по
> индексу, получение длины строки и т.п.
> Это вообще реально?

Да, вполне. Только работать надо не с объектами класса String, а с
объектами класса UnicodeString (появляется как раз после загрузки
I18N). Надеюсь, этот пример поможет:

st> 'мясо' size
8
st> 'мясо!' size
9
st> 'мясо!' asUnicodeString
'мясо!'
st> 'мясо!' asUnicodeString size
5
st> 'мясо!' at: 1
$<16r00D0>
st> 'мясо!' size
9
st> 'мясо!' asUnicodeString inspect
An instance of UnicodeString
  contents: [
    [1]: $м
    [2]: $я
    [3]: $с
    [4]: $о
    [5]: $!
  ]
'мясо!'
st> 'мясо!' asUnicodeString at: 1

st> 'мясо!' asUnicodeString size
5

Чтобы получать юникодные строки при работе с файлами, надо
использовать EncodedStream. Вот ещё небольшой пример:

~/devel $ cat test.txt
Квик браун фокс
джампс овер (не помню)
лэзи дог.
~/devel $ file test.txt
test.txt: UTF-8 Unicode text
~/devel $ cat enc.st
PackageLoader fileInPackage: #I18N.
(I18N.EncodedStream
    on: (File name: (Smalltalk getArgv: 1)) readStream
    from: #utf8)
        linesDo: [:each | Transcript << each; cr]

~/devel $ gst -f enc.st test.txt
Квик браун фокс
джампс овер (не помню)
лэзи дог.
~/devel $

Удачи!

--
http://groups.google.ru/group/sugr
Reply | Threaded
Open this post in threaded view
|

Re: Помогите. Кодировка.

dymko
Спасибо большое, очень выручили.

On 17 июл, 16:32, Dmitry Matveev <[hidden email]> wrote:

> Привет,
>
> 17.07.10, dymko<[hidden email]> написал(а):
>
> > Не могу понять как вообще работать с кодировкой utf-8. Как настроить,
> > что загрузить и т.д.
>
> PackageLoader fileInPackage: #I18N.
>
> > Точнее не совсем нулевой, а сложилось впечатление, что нормальная
> > работа с данной кодировкой не предусмотрена.
>
> На самом деле всё не так уж плохо :) Только регекспы с юникодными
> строками в GNU Smalltalk не работают
>
> > Интересуют вполне обыденные вещи, такие как: получение символа по
> > индексу, получение длины строки и т.п.
> > Это вообще реально?
>
> Да, вполне. Только работать надо не с объектами класса String, а с
> объектами класса UnicodeString (появляется как раз после загрузки
> I18N). Надеюсь, этот пример поможет:
>
> st> 'мясо' size
> 8
> st> 'мясо!' size
> 9
> st> 'мясо!' asUnicodeString
> 'мясо!'
> st> 'мясо!' asUnicodeString size
> 5
> st> 'мясо!' at: 1
> $<16r00D0>
> st> 'мясо!' size
> 9
> st> 'мясо!' asUnicodeString inspect
> An instance of UnicodeString
>   contents: [
>     [1]: $м
>     [2]: $я
>     [3]: $с
>     [4]: $о
>     [5]: $!
>   ]
> 'мясо!'
> st> 'мясо!' asUnicodeString at: 1
> $м
> st> 'мясо!' asUnicodeString size
> 5
>
> Чтобы получать юникодные строки при работе с файлами, надо
> использовать EncodedStream. Вот ещё небольшой пример:
>
> ~/devel $ cat test.txt
> Квик браун фокс
> джампс овер (не помню)
> лэзи дог.
> ~/devel $ file test.txt
> test.txt: UTF-8 Unicode text
> ~/devel $ cat enc.st
> PackageLoader fileInPackage: #I18N.
> (I18N.EncodedStream
>     on: (File name: (Smalltalk getArgv: 1)) readStream
>     from: #utf8)
>         linesDo: [:each | Transcript << each; cr]
>
> ~/devel $ gst -f enc.st test.txt
> Квик браун фокс
> джампс овер (не помню)
> лэзи дог.
> ~/devel $
>
> Удачи!

--
http://groups.google.ru/group/sugr
Reply | Threaded
Open this post in threaded view
|

Re: Помогите. Кодировка.

Dmitry Matveev
In reply to this post by Dmitry Matveev
Так, сразу маленькая поправка:

---     from: #utf8)
+++     from: #utf8 to: #utf8)

Тогда будем в :each получать объекты класса I18N.EncodedString.

17.07.10, Dmitry Matveev<[hidden email]> написал(а):

> Привет,
>
> 17.07.10, dymko<[hidden email]> написал(а):
>> Не могу понять как вообще работать с кодировкой utf-8. Как настроить,
>> что загрузить и т.д.
>
> PackageLoader fileInPackage: #I18N.
>
>> Точнее не совсем нулевой, а сложилось впечатление, что нормальная
>> работа с данной кодировкой не предусмотрена.
>
> На самом деле всё не так уж плохо :) Только регекспы с юникодными
> строками в GNU Smalltalk не работают
>
>> Интересуют вполне обыденные вещи, такие как: получение символа по
>> индексу, получение длины строки и т.п.
>> Это вообще реально?
>
> Да, вполне. Только работать надо не с объектами класса String, а с
> объектами класса UnicodeString (появляется как раз после загрузки
> I18N). Надеюсь, этот пример поможет:
>
> st> 'мясо' size
> 8
> st> 'мясо!' size
> 9
> st> 'мясо!' asUnicodeString
> 'мясо!'
> st> 'мясо!' asUnicodeString size
> 5
> st> 'мясо!' at: 1
> $<16r00D0>
> st> 'мясо!' size
> 9
> st> 'мясо!' asUnicodeString inspect
> An instance of UnicodeString
>   contents: [
>     [1]: $м
>     [2]: $я
>     [3]: $с
>     [4]: $о
>     [5]: $!
>   ]
> 'мясо!'
> st> 'мясо!' asUnicodeString at: 1
> $м
> st> 'мясо!' asUnicodeString size
> 5
>
> Чтобы получать юникодные строки при работе с файлами, надо
> использовать EncodedStream. Вот ещё небольшой пример:
>
> ~/devel $ cat test.txt
> Квик браун фокс
> джампс овер (не помню)
> лэзи дог.
> ~/devel $ file test.txt
> test.txt: UTF-8 Unicode text
> ~/devel $ cat enc.st
> PackageLoader fileInPackage: #I18N.
> (I18N.EncodedStream
>     on: (File name: (Smalltalk getArgv: 1)) readStream
>     from: #utf8)
>         linesDo: [:each | Transcript << each; cr]
>
> ~/devel $ gst -f enc.st test.txt
> Квик браун фокс
> джампс овер (не помню)
> лэзи дог.
> ~/devel $
>
> Удачи!
>

--
http://groups.google.ru/group/sugr