LINUX.ORG.RU

В каких языках строки кодируются в UTF-8?

 , ,


0

2

Интересует именно «internal representation of string type».
Читаю это. Не понимаю, например, про Go. Где-то написано, что используется UTF-8, где-то UTF-16.
Помогите составить список языков, которые используют именно UTF-8.

★★★★★

Последнее исправление: CYB3R (всего исправлений: 2)

.NET и Java совершенно точно используют UTF-16 (UCS-2).

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от beastie

Да, в уже упомянутом Vala всё точно также:

int main() {
    string str = "aФ⌘";

    stdout.printf("%s (%d bytes) contains %d characters:\n", str, str.length, str.char_count());

    unichar c;
    for (int i = 0; str.get_next_char(ref i, out c);) {
        stdout.printf ("%s size %d\n", c.to_string(), c.to_string().length);
    }

    return 0;
}
aФ⌘ (6 bytes) contains 3 characters:
a size 1
Ф size 2
⌘ size 3

CYB3R ★★★★★
() автор топика
Последнее исправление: CYB3R (всего исправлений: 1)

Именно «internal representation of string type» в utf8 очень спорное решение, т.к. оно все же для передачи, а не представления данных. И примеры в этом топике вовсе не говорят, что рантаймы внутри представляют строки в utf8.

staseg ★★★★★
()
Ответ на: комментарий от staseg

И примеры в этом топике вовсе не говорят, что рантаймы внутри представляют строки в utf8.

http://doc.rust-lang.org/1.0.0-beta/book/strings.html :

A string is a sequence of Unicode scalar values encoded as a stream of UTF-8 bytes. All strings are guaranteed to be validly encoded UTF-8 sequences.

anonymous
()
Ответ на: комментарий от anonymous

И примеры в этом топике вовсе не говорят, что рантаймы внутри представляют строки в utf8.

A string is a sequence of Unicode scalar values encoded as a stream of UTF-8 bytes. All strings are guaranteed to be validly encoded UTF-8 sequences.

Я про примеры на Go и Vala (примеров на расте тут вообще не было). И я не утверждаю, что эти языки не представляют строки внутри как utf8, я утверждаю, что примеры этого одназначно не доказывают.

staseg ★★★★★
()
Ответ на: комментарий от CYB3R

это уже к разработчику языка =)
P.S. Хотя, наверное, это удобно. Конвертация, насколько я в курсе, автоматическая.

Atlant ★★★★★
()
Последнее исправление: Atlant (всего исправлений: 1)

Не понимаю, например, про Go. Где-то написано, что используется UTF-8, где-то UTF-16.

В Go строки могут быть в любой кодировке и стандартный индекс по байтам. Строка представлена в памяти как простая последовательность байт (в отличие, например, от Python 3). См. https://play.golang.org/p/hvVOXpTAXH

Однако выражение range, как в примере beastie, ожидает, что строки будут в UTF-8 и итерирует по кодам UTF-32. Стандартная библиотека тоже предполагает, что string в UTF-8. Пакет unicode/utf16 работает со слайсами (как бы массивами) uint16.

proud_anon ★★★★★
()

Давайте лучше про языки где нет строк впринципе. Я начну: erlang.

loz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.