Tag: unicode

C#正则表达式,模式中带有\ Uxxxxxxxx字符

Regex.IsMatch( “foo”, “[\U00010000-\U0010FFFF]” ) 抛出:System.ArgumentException:以相反的顺序解析“[ – ]” – [xy]范围。 查看\ U00010000和\ U0​​010FFF的hex值我得到:第一个字符为0xd800 0xdc00,第二个字符为0xdbff 0xdfff。 所以我想我确实有一个问题。 为什么用\ U形成的Unicode字符在字符串中分成两个字符?

Unicode SQL查询W /参数而不是N前缀

我有一个插入查询,可以在C#中针对SQL Server数据库执行。 我插入的列是nvarchar类型。 我插入该列的数据是非英语的。 我是否足以使用AddWithValue将非英语数据传递给服务器? 像这样的例子: string dogName = “עברית”; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); using (SqlCommand command = new SqlCommand(“INSERT INTO Dogs1(Name) VALUES @Name”, connection)) { command.Parameters.AddWithValue(“Name”, dogName); command.ExecuteNonQuery(); } } 或者我必须使用N前缀来声明它是unicode吗? 就像它在这里说的那样。

在.NET 4.5中使用HttpClient进行编码

我正在使用fogbugz XML API消耗一些数据。 此API始终以UTF-8提供数据。 当使用WebClient类发出请求时,我可以设置编码。 例如: var result = new WebClient(); result.Encoding = Encoding.UTF8; 但是HttpClient类怎么样? HttpClient client = new HttpClient(); 我应该使用: client.GetByteArrayAsync(url); …然后将编码中的字节(UTF-8)转换为字符串? 或者有没有办法直接将内容作为UTF-8字符串? using (var client = Connector.GetHttpClient()) { var byteData = await client.GetByteArrayAsync(url); data = Encoding.UTF8.GetString(byteData); } 最后,这里是XML响应的摘录:

如何修复空格的UTF编码?

在我的C#代码中,我从PDF文档中提取文本。 当我这样做时,我得到一个UTF-8或Unicode编码的字符串(我不确定哪个)。 当我使用Encoding.UTF8.GetBytes(src); 要将它转换为字节数组,我注意到空格实际上是两个字符值为194和160的字符。 例如,字符串“CLE action”看起来像 [67, 76, 69, 194 ,160, 65 ,99, 116, 105, 111, 110] 在一个字节数组中,空格是194和160 ……并且因为这个src.IndexOf(“CLE action”); 当我需要它返回1时返回-1。 如何修复字符串的编码?

返回C#中的字符代码点

如何返回角色的Unicode代码点 ? 例如,如果输入为“A”,则输出应为“U + 0041”。 理想情况下,解决方案应该照顾代理对 。 代码点是指根据Unicode的实际代码点,它与代码单元不同(UTF8具有8位代码单元,UTF16具有16位代码单元,UTF32具有32位代码单元,在后一种情况下为值考虑到字节序后,等于代码点)。

将中文字符转换为Unicode

假设我有一个随机的汉字,玩。 我想将它转换为Unicode,即U + 73A9。 我怎么能在C#中做到这一点?

日本电子邮件主题编码

显然,编码日语电子邮件有点挑战性,我正在慢慢发现自己。 如果有任何专家(即使是那些经验有限的专家),我可以请一些指导如何做,如何测试以及如何validation它? 请记住,我从未踏足日本附近的任何地方,只是我正在开发的产品在其他地方使用。 到目前为止我知道的是什么(我认为)如下: – 日语电子邮件应使用ISO-2022-JP,日本JIS代码页50220或可能的SHIFT_JIS代码页932进行编码 – 电子邮件传输编码应设置为Base64用于纯文本,7Bit用于Html – 电子邮件主题应单独编码,以“=?ISO-2022-JP?B?”开头。 (不知道这是什么意思)。 我试过用这个主题编码 “=?ISO-2022-JP?B?” + Convert.ToBase64String(Encoding.Unicode.GetBytes(subject)) 它基本上给出了预期的编码字符串,但它不会在电子邮件程序中显示为任何日文文本 – 我已经在Outlook 2003,Outlook Express和GMail中进行了测试 任何帮助将不胜感激 好的,所以发布一个简短的更新,由于这两个有用的答案,我已经设法得到正确的格式和编码。 现在,Outlook提供了类似于正确主题的东西: =?iso-2022-jp?B?6 Japanese test に各々の視点で語ってもらった。 6相当の防水?= 但是,Outlook Express中的完全相同的电子邮件给出了这样的主题: =?iso-2022-jp?B?6 Japanese test 縺ォ蜷・・・隕也せ縺ァ隱槭▲縺ヲ繧ゅi縺」縺溘・ 6逶ク蠖薙・髦イ豌エ?= 此外,在Outlook Express的收件箱视图中查看时,电子邮件主题更加奇怪,如下所示: =?iso-2022-jp?B?6 Japanese test ??????????????? 6???????= Gmail似乎与Outlook的工作方式类似,看起来是正确的。 我无法理解这一个。

使用.Net的大于2字节的unicode字符

我正在使用此代码生成U+10FFFC var s = Encoding.UTF8.GetString(new byte[] {0xF4,0x8F,0xBF,0xBC}); 我知道它是供私人使用的,但它确实显示了一个单一的字符,正如我在展示它时所期望的那样。 操纵这个unicode角色时会出现问题。 如果我以后这样做: foreach(var ch in s) { Console.WriteLine(ch); } 它不打印单个字符,而是打印两个字符(即字符串显然由两个字符组成)。 如果我改变我的循环,将这些字符添加回空字符串,如下所示: string tmp=””; foreach(var ch in s) { Console.WriteLine(ch); tmp += ch; } 在这结束时, tmp将只打印一个字符。 到底发生了什么? 我认为char包含一个unicode字符,除非我正在转换为字节,否则我不必担心字符有多少字节。 我真正的用例是我需要能够检测字符串中何时使用非常大的unicode字符。 目前我有这样的事情: foreach(var ch in s) { if(ch>=0x100000 && ch<=0x10FFFF) { Console.WriteLine("special character!"); } } 但是,由于这种非常大的字符分裂,这不起作用。 如何修改它以使其工作?

如何在.NET中猜测没有BOM的文件的编码?

我在.NET中使用StreamReader类,如下所示: using( StreamReader reader = new StreamReader( “c:\somefile.html”, true ) { string filetext = reader.ReadToEnd(); } 当文件具有BOM时,这可以正常工作。 我遇到了没有BOM的文件的麻烦..基本上我得到了胡言乱语。 当我指定Encoding.Unicode它工作正常,例如: using( StreamReader reader = new StreamReader( “c:\somefile.html”, Encoding.Unicode, false ) { string filetext = reader.ReadToEnd(); } 所以,我需要将文件内容转换为字符串。 那么人们通常如何处理这个呢? 我知道没有解决方案可以在100%的时间内工作,但我想提高我的几率。显然有一些试图猜测的软件(例如,记事本,浏览器等)。 .NET框架中是否有一种方法可以猜测我? 有没有人有他们想分享的代码? 更多背景:这个问题和我的问题差不多,但我在.NET领域。 这个问题让我进入了一个列出各种编码检测库的博客,但没有一个在.NET中

.NET String.Length属性返回什么? 代替中性长度或完整的字符长度

文档和语言在VS 2008和2010之间有所不同: VS 2008文档 在内部,文本存储为Char对象的只读集合,每个Char对象代表一个以UTF-16编码的Unicode字符 。 … 字符串的长度表示字符数,无论字符是否由Unicode代理项对形成。 要访问字符串中的各个Unicode代码点,请使用StringInfo对象。 – http://msdn.microsoft.com/en-us/library/ms228362%28v=vs.90%29.aspx VS 2010文档 在内部,文本存储为Char对象的顺序只读集合 。 … 字符串的Length属性表示它包含的Char对象的数量,而不是Unicode字符的数量。 要访问字符串中的各个Unicode代码点,请使用StringInfo对象。 – http://msdn.microsoft.com/en-us/library/ms228362%28v=VS.100%29.aspx 两种情况下使用的语言都没有明确区分“字符”,“Unicode字符”,“字符类”,“Unicode代理项对”和“Unicode代码点”。 VS2008文档中的语言声明“字符串表示字符的数量,无论字符是否由Unicode代理项对形成”似乎将“字符”定义为可能是Unicode代理项对的结果的对象,这表明它可能代表一个4字节的序列而不是一个2字节的序列。 它还特别指出一个“char”对象以UTF-16编码,这表明它可以代表一个代理对(4个字节而不是2个字节)。 我很确定这是错的。 VS2010文档更加精确。 它区分了“char”和“Unicode character”,但不区分“Unicode character”和“Unicode code point”。 如果代码点引用代理对的一半,并且“Unicode字符”代表完整对,那么“Char”类的名称不正确,并且根本不引用“Unicode字符”(他们声明它不),它真的是一个Unicode代码点。 那么以下两个陈述都是真的吗? (是的,我认为。) String.Length表示Unicode代码点长度,和 String.Length既不表示Unicode字符长度也不表示我们认为是真正的字符长度(将显示的字符数),而是表示“Char”对象的数量,每个对象代表一个Unicode代码点(不是Unicode字符)。