C# 对齐组件的字符串格式不一致

C# 对齐组件的字符串格式不一致,c#,string-formatting,bidi,C#,String Formatting,Bidi,我试图在应用程序()中输出一些字段对齐的数据 我注意到有些字符串在字段边界上没有正确对齐 这一点在以下示例代码中最为明显,这些代码只将所有区域性中的数字作为货币输出到文本文件中 var value = 5000.95; using (var writer = new StreamWriter("c:\\test.txt")) { foreach (var culture in CultureInfo.GetCultures(CultureTypes.AllCultures).OrderB

我试图在应用程序()中输出一些字段对齐的数据

我注意到有些字符串在字段边界上没有正确对齐

这一点在以下示例代码中最为明显,这些代码只将所有区域性中的数字作为货币输出到文本文件中

var value = 5000.95;
using (var writer = new StreamWriter("c:\\test.txt"))
{
    foreach (var culture in CultureInfo.GetCultures(CultureTypes.AllCultures).OrderBy(c => c.Name))
    {
        writer.WriteLine($"{value.ToString("C2", culture),-20}{culture.Name,-10}");
    }
}
这是使用左对齐的不正确对齐输出的示例:

R 5,000.95 af R 5,000.95 af-ZA ETB5,000.95 am ETB5,000.95 am-ET ر.س.‏ 5,000.95 ar د.إ.‏ 5,000.95 ar-AE د.ب.‏ 5,000.95 ar-BH د.ج.‏ 5,000.95 ar-DZ ج.م.‏ 5,000.95 ar-EG د.ع.‏ 5,000.95 ar-IQ د.ا.‏ 5,000.95 ar-JO R 5,000.95 af-ZA ETB5,000.95 am ETB5,000.95 am-ET ر.س.‏ 5,000.95 ar د.إ.‏ 5,000.95 ar-AE د.ب.‏ 5,000.95 ar-BH د.ج.‏ 5,000.95 ar-DZ ج.م.‏ 5,000.95 ar-EG د.ع.‏ 5,000.95 ar-IQ د.ا.‏ 5,000.95 ar-JO د.ك.‏ 5,000.95 ar-KW ل.ل.‏ 5,000.95 ar-LB د.ل.‏5,000.95 ar-LY د.م.‏ 5,000.95 ar-MA $ 5.000,95 arn $ 5.000,95 arn-CL R 5000.95 af 5000.95南非兰特 ETB5000.95上午 东部时间上午5时50分 ر.س.‏ 5000.95 ar د.إ.‏ 5000.95 ar AE د.ب.‏ 5000.95 ar波黑 د.ج.‏ 5000.95 ar DZ ج.م.‏ 5000.95 ar EG د.ع.‏ 5000.95 ar IQ د.ا.‏ 5000.95 ar JO 这是使用右对齐的示例:

R 5,000.95 af R 5,000.95 af-ZA ETB5,000.95 am ETB5,000.95 am-ET ر.س.‏ 5,000.95 ar د.إ.‏ 5,000.95 ar-AE د.ب.‏ 5,000.95 ar-BH د.ج.‏ 5,000.95 ar-DZ ج.م.‏ 5,000.95 ar-EG د.ع.‏ 5,000.95 ar-IQ د.ا.‏ 5,000.95 ar-JO R 5,000.95 af-ZA ETB5,000.95 am ETB5,000.95 am-ET ر.س.‏ 5,000.95 ar د.إ.‏ 5,000.95 ar-AE د.ب.‏ 5,000.95 ar-BH د.ج.‏ 5,000.95 ar-DZ ج.م.‏ 5,000.95 ar-EG د.ع.‏ 5,000.95 ar-IQ د.ا.‏ 5,000.95 ar-JO د.ك.‏ 5,000.95 ar-KW ل.ل.‏ 5,000.95 ar-LB د.ل.‏5,000.95 ar-LY د.م.‏ 5,000.95 ar-MA $ 5.000,95 arn $ 5.000,95 arn-CL 5000.95南非兰特 ETB5000.95上午 东部时间上午5时50分 ر.س.‏ 5000.95 ar د.إ.‏ 5000.95 ar AE د.ب.‏ 5000.95 ar波黑 د.ج.‏ 5000.95 ar DZ ج.م.‏ 5000.95 ar EG د.ع.‏ 5000.95 ar IQ د.ا.‏ 5000.95 ar JO د.ك.‏ 5000.95 ar千瓦 ل.ل.‏ 5000.95 ar-LB د.ل.‏5000.95欧元 د.م.‏ 5000.95 ar MA 5000.95澳元 $5.000,95 arn CL 您可以看到,包含unicode的区域性的格式在20个字符的位置没有正确对齐,正如文档所说的那样。它还将田地向右抛到田地边界之外。这个问题似乎主要局限于使用Unicode格式化货币的文化


有什么好方法可以解决这个问题吗?

波斯语(fair)是一种从右向左的语言。我很好奇,如果您将对齐方式更改为
-20
,它是否会根据需要对齐该行?@Amy使用负对齐方式时,货币部分正确地左对齐,但以下一些字段会被推到左侧。我将使用-20添加一些示例输出。一个基本的解决方法(我不确定是否称之为“解决方案”)是检查区域性是否从右向左,如果是,则翻转对齐组件上的符号。不过,我希望该语言能更直接地支持这类事情。将“bidi”(双向)标记添加到问题中。@BradleyUffner字符串插值是字符串顶部的语法糖。格式。。。因此,它将与String.Format有相同的问题。@loneshark99是的,我更新了这个问题,注意到在探索了更多内容之后,它并不是特定于字符串插值的。