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是的,我更新了这个问题,注意到在探索了更多内容之后,它并不是特定于字符串插值的。