Замечания и предложения

Речь шла о том, что совместимость стараются обеспечить. А Word и Excel - это возражение на то, что кириллица в файлах не важна.

Подсказка по точке всё равно считает, что это функция.

Это уже проблема IDE а не компилятора - она отдельно.

О цикле loop не написано, что он не выполняется, если количество выполнений > integer.Maxvalue.

Зачем пробел после каждой суррогатной пары при выводе в консоль?

Думаю, теперь это вопрос к Майкрософту. Дефолтный вывод в консоль переключили в UTF-8 стандартными средствами .NET, а уж насколько корректно его интерпретирует сама консоль – нюансы внутренней реализации ОС.

Из этой программы можно скопировать суррогатную пару до и после вывода пробела:

## var a := Arr($D800, $DC00, $8, ' '.Code);
foreach var i in a do
begin
  Write(char(i));
  Console.ReadKey(true);
end;

Тут — сравнение строк:

## var s1:='𐀀'; // до
var s2:='𐀀'; // после
Write(s1=s2); // True

Тут — сравнение кодов:

## var a := Arr($D800, $DC00); // до
var s1 := '𐀀'; // после
var a2 := new integer[s1.Length];
for var i := 1 to s1.Length do
  a2[i - 1] := Ord(s1[i]);
var b := true;
if (a.Length <> a2.Length) then
  b := false
else
  for var i := 0 to a.Length - 1 do
    if (a[i] <> a2[i]) then
      b := false;
Write(b); // True

Тут — проверка, что это 2 символа в UTF-16:

## var s1 := '𐀀';
Write(char.IsSurrogatePair(s1, 0)); // True

Значит, в буфере консоли символы хранятся в UTF-32? Предлагаю добавить тип символа в UTF-32, чтобы было удобнее обрабатывать символы перед выводом в консоль.

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

При форматировании ## var s := '𐀀'; появляется неожиданный символ.

Может даже идея хорошая, но сначала подумайте куда и как их добавить? А то по моему вы опять предлагаете не то не там…

Ну а для этого есть issue IDE.

Что с выводом в последних версиях?

Мы перешли на UTF-8 в консольном выводе. Это где такое происходит - в какой операционке? И приведите программу.

И - это консоль или окно PascalABC.NET?

Зачем?

По остальному: это консоль, операционка — win 7 sp1.

Код простейший из возможных:

## writeln('мелкософт');

В Win 10 64-бит работает нормально, но наверно неправильно по умолчанию ориентироваться на Win 10…

1 лайк

4 сообщения было перемещено в эту тему: Болталка PascalABC.NET

Плохо. Надо возвращать назад

1 лайк

Если оставить старое 1251, то на нерусской Win 10 вопросики в консоли. Как раз у нас в дисплейных классах. Вот в чем проблема.

А это у Вас только при запуске по Shift-F9? В окне Паскаля всё нормально?

Да.

Там не 1251, а 866

Впрочем, @ibond уже сделал фикс, спасибо!

Залил. Проверяйте

Всё нормально, спасибо ещё раз

image

1 лайк

Предлагаю добавить возможность изменять путь сохранения файлов по умолчанию в самой программе, а не только при установке

Если вы создадите ярлык PascalABC.NET в некоторой папке, то путь сохранения файлов будет как раз в этой папке.