CLR关于语言文化的类型一CultureInfo类和字符串与线程的关联

.Net Frameword使用System.Globalization.Culture类型表示一个"语言/国家"对(根据RFC 1766标准).例如,'en-US'代表美国英语,'en-AU'代表澳大利亚英语,而'de-DE'代表德国德语.

在CLR中,每个线程都关联了两个特殊的属性,每个属性都引用一个CultureInfo对象.属性如下:

(1)、CurrentCultrue属性

Thread类下面的CurrentCultrue属性,关联的是当前线程的CultrueInfo对象.返回当前线程的CultrueInfo(语言/国家)实例对象.

该属性用于数字和日期的格式化、字符串大小写转换以及字符串比较.格式化的同时要用到CultureInfo对象的"语言"和"国家"部分.创建线程时,这个线程属性被设为一个默认的CultrueInfo对象,其值通过调用Win32函数GetUserDefaultLCID来获取。可通过Windows控制面板的"区域和语言"对话框来修改这个值.

不确定是不是创建线程时通过GetUserDefaultLCID()方法来获取语言/国家信息,因为Thread类下面我没有查到GetUserDefaultLCID方法,但是.Net Framework确实提供了这个方法.由于是internal所以无法调用显示,有点尴尬.另外我在CultureInfo类下面发现了LCID属性,调用代码如下:

var currentThreadLanguage = Thread.CurrentThread.CurrentCulture.LCID;
var cl = new CultureInfo(CurrentThreadLanguage);
Console.WriteLine("简称:{0},全称:{1}",cl.Name,cl.NativeName); //输出简称:zh-CN,全称:中文(中国)

(2)、CurrentUICultrue属性

调用代码:

var currentThreadLanguage = Thread.CurrentThread.CurrentUICulture.LCID;
var cl = new CultureInfo(CurrentThreadLanguage);
Console.WriteLine("简称:{0},全称:{1}",cl.Name,cl.NativeName); //输出简称:zh-CN,全称:中文(中国)

(3)、CompareInfo属性

.Net Framework中每个CultureInfo实例中都有一个CompareInfo属性实例,该属性初始化了一个根据当前语言/国家的CompareInfo实例,该类型封装了语言文化的字符排序表信息(根据Uniocde标准的定义)。

var a = "sie";
var b = "Ich";
var ci = new CultureInfo("de-DE");
Console.WriteLine(string.Compare(a,b,false, ci)); //输出:1

还有其他语言的判断,具体请自行验证

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏王磊的博客

宽字符编码和解码通用类[CodeWidthChartUtility]

  在做jsonp传递的时候遇到一个问题,当有特殊字符或中文的时候就会导致数据错误或者是乱码,刚开始有js的编码和解码和正则,都比较麻烦,现在找到了一种合适的解...

3148
来自专栏微信公众号:Java团长

HashMap和Hashtable的区别

HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题。HashMap...

1221
来自专栏分布式系统和大数据处理

基于业务对象(列表)的排序

在上一篇文章 基于业务对象的筛选 中,我们讨论了如何实现Predicate<T>(T object)委托,自定义DateFilter 类来对业务对象进行筛选。与...

1042
来自专栏码云1024

C#委托与事件

4096
来自专栏恰童鞋骚年

.NET基础拾遗(3)字符串、集合和流

  众所周知,在.NET中String是引用类型,具有不可变性,当一个String对象被修改、插入、连接、截断时,新的String对象就将被分配,这会直接影响到...

1001
来自专栏Java大联盟

Spring Data MongoDB:Repository

使用Spring Data可以帮助我们快速构建项目,非常方便,Spring Data在数据持久层已经写好了常用功能,我们只需要定义一个接口去继承Spring D...

2361
来自专栏GreenLeaves

C# Encoding

之前做公司项目的时候,对于C#编码这块总是一知半解,所以打算通过这篇笔记对C#编码(Encoding)进行彻底的扫盲,关于编码和字符集的基础知识,请参考字符集和...

2687
来自专栏大内老A

WCF技术剖析之十三:序列化过程中的已知类型(Known Type)

DataContractSerializer承载着所有数据契约对象的序列化和反序列化操作。在上面一篇文章(《数据契约(Data Contract)和数据契约序列...

27510
来自专栏小樱的经验随笔

codeforces 767A Snacktower(模拟)

A. Snacktower time limit per test:2 seconds memory limit per test:256 megabytes ...

3357
来自专栏.NET技术

C#系列之String和StringBuilder

      首先和博园的各位打声招呼,小弟在博园呆了也有一年多了。平常一有时间就会过来看看文章,学习各位的经验,现在养成了一种一天不来博园,心里就不踏实的习惯,...

1184

扫码关注云+社区

领取腾讯云代金券