C# 在控制台C中格式化RTL文本和列#
我正在使用“string.Format”来处理文本和创建列C# 在控制台C中格式化RTL文本和列#,c#,right-to-left,string.format,console.writeline,C#,Right To Left,String.format,Console.writeline,我正在使用“string.Format”来处理文本和创建列 string.Format("{0, -4}{1, -16}{2, 11}\n", "#", "Name", "Price") 结果为英语,LTR格式正确: # Name Price --- ------- -------- 1 Product1 234440 2 Product2
string.Format("{0, -4}{1, -16}{2, 11}\n", "#", "Name", "Price")
结果为英语,LTR格式正确:
# Name Price
--- ------- --------
1 Product1 234440
2 Product2 34455
当我更改语言并使用阿拉伯语字符时,列对齐显示不正确:
# نام قیمت
--- ------- --------
1 محصول ۲ ۳۴۲۳۴
2 محصول ۳ ۴۵۳۴۵۳
我也使用了\u200E和\u200F,但结果并没有改变
我想要的列显示是:
نام قیمت #
----- ------- ---
محصول۱ ۱۲۲۲۳ #
محصول۲ ۲۲۳۳ #
有没有办法解决这个问题?请使用下面的代码示例。基于
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();
}
谢谢但是,当我使用number而不是“#”时,列无法正确显示!您可以在调试模式下测试它以查看波斯字符!刚刚编辑了我的答案。我在
baseStr2
Agree中将4增加到14,cmd和终端本机不支持RTL。