在.NET 8中RegionInfo返回THB而非฿作为货币符号的问题
.NET 8中RegionInfo获取泰国货币符号返回THB而非฿的问题
在.NET 8环境下,使用RegionInfo类传入区域代码"TH"获取泰国货币符号时,CurrencySymbol属性返回的是"THB",而非预期的泰铢符号"฿"。测试代码如下:
Console.OutputEncoding = System.Text.Encoding.UTF8; // Displays the property values of the RegionInfo for "TH". RegionInfo myRI1 = new RegionInfo( "TH" ); Console.WriteLine( " Name: {0}", myRI1.Name ); Console.WriteLine( " DisplayName: {0}", myRI1.DisplayName ); Console.WriteLine( " EnglishName: {0}", myRI1.EnglishName ); Console.WriteLine( " IsMetric: {0}", myRI1.IsMetric ); Console.WriteLine( " ThreeLetterISORegionName: {0}", myRI1.ThreeLetterISORegionName ); Console.WriteLine( " ThreeLetterWindowsRegionName: {0}", myRI1.ThreeLetterWindowsRegionName ); Console.WriteLine( " TwoLetterISORegionName: {0}", myRI1.TwoLetterISORegionName ); Console.WriteLine( " CurrencySymbol: {0}", myRI1.CurrencySymbol ); Console.WriteLine( " ISOCurrencySymbol: {0}", myRI1.ISOCurrencySymbol ); Console.WriteLine();
问题原因
直接使用两字母区域代码(如"TH")构造RegionInfo时,该类会依赖当前线程的文化设置返回区域相关信息。若当前文化并非泰语(泰国)文化(th-TH),CurrencySymbol会默认返回ISO货币代码"THB",而非本地货币符号"฿"。
解决方法
方法1:使用泰语文化代码构造RegionInfo
传入完整的泰语(泰国)文化代码"th-TH"创建RegionInfo实例,即可正确获取"฿"符号:
Console.OutputEncoding = System.Text.Encoding.UTF8; RegionInfo myRI1 = new RegionInfo("th-TH"); Console.WriteLine(" CurrencySymbol: {0}", myRI1.CurrencySymbol); // 输出 ฿
方法2:通过CultureInfo获取货币符号
借助CultureInfo类的NumberFormat.CurrencySymbol属性,直接获取指定文化下的货币符号:
Console.OutputEncoding = System.Text.Encoding.UTF8; var thaiCulture = CultureInfo.GetCultureInfo("th-TH"); Console.WriteLine(" CurrencySymbol: {0}", thaiCulture.NumberFormat.CurrencySymbol); // 输出 ฿
内容的提问来源于stack exchange,提问作者FireFly
相关产品推荐
相关产品推荐

