使用对齐组件进行不一致的字符串格式化

时间:2017-05-01 17:29:20

标签: c# string-formatting bidi

我正在尝试在应用程序中输出一些字段对齐的数据(see Alignment Component on this MSDN documentation)。

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

这一点最明显的是这一小段示例代码只是将所有文化中的数字作为货币输出到文本文件中。

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

您可以看到包含unicode的文化格式在20个字符位置未正确对齐,正如文档所说的那样。它也将场地扔到场外边界的右边。这个问题似乎主要局限于使用Unicode格式化货币的文化。

有没有一个很好的方法来调整这个问题?

0 个答案:

没有答案