форматировать текст RTL и столбец в консоли С#

Я использую string.Format для управления текстом и создания столбцов.

    string.Format("{0, -4}{1, -16}{2, 11}\n", "#", "Name", "Price")

и результат на английском языке и в формате LTR правильный:

    ‎#   Name                  Price
    --- -------            --------
    1   Product1             234440
    2   Product2              34455

когда я меняю языки и использую арабские символы, выравнивание столбцов отображается неправильно:

    ‎#     نام               قیمت
    --- -------            --------
    1   محصول ۲            ۳۴۲۳۴
    2   محصول ۳            ۴۵۳۴۵۳

Я также использую ‎ и ‏, но результат не изменился.

мое желаемое отображение столбца:

    نام                  قیمت   #
    -----              ------- ---
    محصول۱              ۱۲۲۲۳   #
    محصول۲               ۲۲۳۳   #

Есть ли способ решить эту проблему?


person Saleh Bagheri    schedule 18.09.2017    source источник


Ответы (1)


Пожалуйста, используйте следующий пример кода. Вторая серия, основанная на baseStr2, работает так, как вы хотели.

static void Main(string[] args)
{
    var baseStr = "{0, -4}{1, -16}{2, 11}\n";

    Console.WriteLine(string.Format(baseStr, "#", "Name", "Price"));
    Console.WriteLine(string.Format(baseStr, "#", "Product1", "1232132"));
    Console.WriteLine(string.Format(baseStr, "#", "P 2", "88"));
    Console.WriteLine("------------------------");

    Console.WriteLine(string.Format(baseStr, "#", "نام", "قیمت"));
    Console.WriteLine(string.Format(baseStr, "#", "فرش", "1232132"));
    Console.WriteLine(string.Format(baseStr, "#", "یخچال فریزر", "88"));

    Console.WriteLine("------------------------");

    var baseStr2 = "{2, -11}{1, 16}{0, 14}\n";

    Console.WriteLine(string.Format(baseStr2, "#", "Name", "Price"));
    Console.WriteLine(string.Format(baseStr2, "#", "Product1", "1232132"));
    Console.WriteLine(string.Format(baseStr2, "#", "P 2", "88"));
    Console.WriteLine("------------------------");

    Console.WriteLine(string.Format(baseStr2, "#", "نام", "قیمت"));
    Console.WriteLine(string.Format(baseStr2, "۳۴۲۳۴", "فرش", "1232132"));
    Console.WriteLine(string.Format(baseStr2, "۴۵۳۴۵۳", "یخچال فریزر", "88"));

    Console.WriteLine("------------------------");

    Console.ReadLine();
}
person Afshar Mohebi    schedule 14.10.2017
comment
Спасибо! но когда я использую число вместо #, столбцы отображаются неправильно! - person Saleh Bagheri; 14.10.2017
comment
вы можете протестировать его в режиме отладки, чтобы увидеть персидские символы! - person Saleh Bagheri; 14.10.2017
comment
Только что отредактировал мой ответ. Я увеличиваю 4 до 14 в baseStr2 - person Afshar Mohebi; 14.10.2017
comment
Согласитесь, cmd и терминал изначально не поддерживают RTL. - person Afshar Mohebi; 14.10.2017