Консольное приложение Unicode в Delphi 2009

Начиная с TFS 2015.2 больше не требуется наличие действующего ключа продукта. Каждый может установить TFS, и теперь это зависит от пользовательских лицензий. Команда до 5 человек бесплатна, и после этого вы должны следовать условиям лицензирования Microsoft, покупая ежемесячный доступ для каждого участника. Вы можете найти больше по этой ссылке: https://docs.microsoft.com/da-dk/azure/devops/organizations/billing/buy-access-tfs-test-hub?view=tfs-2018&viewFallbackFrom = VSTS

10
задан 5 November 2008 в 13:18
поделиться

6 ответов

Я не уверен, именно это Вы после, но можно создать консольные приложения Unicode во всех 32-разрядных версиях Delphi при помощи Windows API functions. Я просто попробовал Delphi 4:

program test;

{$APPTYPE CONSOLE}

uses
  Windows;

var
  s: WideString;
  i: integer;
  Written: Cardinal;
begin
  SetLength(s, 80);
  for i := 1 to 80 do
    s[i] := WideChar(48 + i);
  WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), PWideChar(s), 80, Written,
    nil);
end.

У меня нет Delphi 2009, чтобы попробовать, как ввод Unicode представляет в виде строки в работах редактора...

9
ответ дан 3 December 2019 в 16:11
поделиться

Writeln в Delphi, 2009 все еще использует ANSI (см. Систему TTextRec), но можно использовать UTF8Encode и изменить выходную кодовую страницу консоли на UTF8 путем вызова SetConsoleOutputCP (CP_UTF8). Вам также будет нужен хороший шрифт для фактического отображения символов Unicode.

11
ответ дан 3 December 2019 в 16:11
поделиться

Вы не можете (По крайней мере, не со стандартной библиотекой). Консольные функции являются единственным не функции Unicode в Delphi 2009.

5
ответ дан 3 December 2019 в 16:11
поделиться

@Kabrol: С растровым набором шрифтов я не вижу ни один из символов, но с Lucida Console я вижу, по крайней мере, widechar (11$ f) - "ğ".

См. "SetConsoleOutputCP, Только Эффективный со Шрифтами юникода" и в целом описанием консольных API-функций при "Консольной Ссылке".

1
ответ дан 3 December 2019 в 16:11
поделиться

Консоль Windows не может отобразить unicode charactes, так попытайтесь отправить вывод в файл с:

my_app.exe > unicode_file.txt

и попытайтесь просмотреть unicode_file.txt с хорошим текстовым редактором.

0
ответ дан 3 December 2019 в 16:11
поделиться

На самом деле существует способ сделать это со стандартным WriteLn () вызовы, но он вовлекает исправление ошибки в RTL Delphi 2009. Вещь, Delphi делает некоторое волшебство компилятора для WriteLn. Для аргументов UnicodeString это приводит к вызову к _WriteUString. Тот метод виден в System.pas, хотя Вы не можете назвать его непосредственно. В нем Вы будете видеть вызов к _WriteLString, но тот метод получает аргумент AnsiString. Таким образом, когда этот вызов происходит, Ваш UnicodeString является downcasted к AnsiString.

Решение, для изменения этого UnicodeString-> бросок AnsiString в UnicodeString-> бросок UTF8String.

Теперь при установке консоли на UTF8 все символы пройдут нетронутый (и да, конечно, Вам будет нужен шрифт с поддержкой символов, которые Вы хотите показать):

SetConsoleOutputCP(CP_UTF8)

Поскольку этот RTL фиксирует, необходимо будет сделать некоторое изящное сцепление кода. Я уже сделал это, и мой коллега занят, пишущий статью об этом. Я отправлю ссылку, после того как это доступно онлайн.

Удачи!

0
ответ дан 3 December 2019 в 16:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: