pascalabcnet / pascalabcnetide

0 stars 0 forks source link

Некоторые японские символы переключают цвет консоли на крассный, если вывести их достаточно раз #276

Open SunSerega opened 1 year ago

SunSerega commented 1 year ago
## loop 457 do '服ビ'.println;

На предпоследней строчке символ съедает, и вместо его вывода - переключает цвет на крассный.

Если вывести 1000 раз - в какой-то момент цвет переключается назад на чёрный.

У меня это много с чем воспоизводится, но тут уж очень стабильно поймалось. И во всех случаях цвет крассный.

miks1965 commented 1 year ago

Да, для китайского языка это всё не отлажено. Если скажете как - поправим

SunSerega commented 1 year ago

Мне кажется там кривой код который принимает текст из вывода программы. Он ещё вставляет рандомные пустые строчки время от времени.

miks1965 commented 1 year ago

Ну это другое. Рандомно и устойчивая ошибка - это разные вещи

miks1965 commented 1 year ago

А потом просто может у нас преобразователь не заточен на четырехбайтовую кодировку

SunSerega commented 1 year ago

Там по 3 байта на символ в UTF8, и по 2 байта в UTF16. Это не суррогатные символы.

SunSerega commented 1 year ago

Рандомно в смысле что для разных символов - на разных строчках. Но воспроизвести стабильно тоже не сложно:

## var s := ('a'..'z').JoinToString;
loop 920 do s.Println;

Тут перед последней строчкой вставляет пустую.

Я не помню где, но видел в коде IDE какое то очень странное преобразование байтов. System.IO.StreamReader.Read уже обрабатывает все крайние случаи. Поэтому прямой работы с байтами там в принципе быть не должно.

miks1965 commented 1 year ago

Ну может посмотрите, можно ли порефакторить этот код