Tag: utf 16

在字符串中定义4字节UTF-16字符

我读过一个关于UTF-8,UTF-16和UCS-2的问题 ,几乎所有答案都说明UCS-2已经过时,C#使用UTF-16。 但是,我在C#中创建4字节字符U + 1D11E的所有尝试都失败了,所以我实际上认为C#仅使用UTF-16的UCS-2子集。 有我的尝试: string s = “\u1D11E”; // gives the 2 character string “ᴑE”, because \u1D11 is ᴑ string s = (char) 0x1D11E; // won’t compile because of an overflow string s = Encoding.Unicode.GetString(new byte[] {0xD8, 0x34, 0xDD, 0x1E}); // gives 㓘ờ C#字符串真的是UTF-16还是它们实际上是UCS-2? 如果它们是UTF-16,我怎样才能将小提琴谱号放入我的C#弦中?

URL编码ASCII / UTF16字符

我正在尝试对一些字符串进行URL编码,但是我对.Net框架提供的方法存在问题。 例如,我正在尝试包含’â’字符的编码字符串。 例如,根据w3schools ,我希望这个特征被编码为’%E2’(我必须调用的PHP系统也期望这个……)。 我尝试使用这些方法: System.Web.HttpUtility.UrlEncode(“â”); System.Web.HttpUtility.UrlPathEncode(“â”); Uri.EscapeUriString(“â”); Uri.EscapeDataString(“â”); 但是,它们都将此字符编码为:%C3%A2 我想这与.Net中的字符串是UTF-16编码的事实有关。 所以为了避免这个问题,我可以写这个例子: “%” + ((int)character).ToString(“X”) 但是,我想知道框架是否已经有内置方法(我在这里或其他地方找不到任何答案,为什么我的角色以这种方式编码)?

Visual Studio GlobalSuppression.cs文件和UTF-16

似乎Visual Studio 2015使用UTF-16编码保存GlobalSuppression.cs文件。 这在使用SVN时很烦人,因为它认为UTF-16文件是二进制文件。 问题: 使用Visual Studio,是否可以使用UTF-8编码保存GlobalSuppression.cs ? 或者,有人可以提供一个位置,我可以找到该文件所基于的模板(如果存在)? 请注意,我在Common7\IDE\ItemTemplates找不到模板。

C#中的UTF16LE的MD5(无BOM和0字节结束)

我有以下问题; 我需要创建一个方法,生成一个字符串的MD5哈希。 该字符串例如是“1234567z-äbc”(与变音符号一起使用)。 这个实际的MD5哈希是:935fe44e659beb5a3bb7a4564fba0513 MD5哈希,我需要的是(100%肯定):9e224a41eeefa284df7bb0f26c2913e2 我的文档说,它必须是没有BOM的UTF16LE转换和字符串的0-Byte End。 问题是转换到这个。 我在Javascript中有一个工作示例,但是为了推送字节,我仍然有点缺乏经验。 /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as defined in RFC 1321. * Version 2.1 Copyright (C) Paul Johnston 1999 – 2002. * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * Distributed under the BSD License […]

如何创建一个带有代理对的字符串?

我在Jon Skeet的博客上看到这篇文章 ,他谈到了字符串翻转。 我想尝试他自己展示的例子,但它似乎有效……这让我相信我不知道如何创建一个包含代理对的字符串,这实际上会导致字符串反转失败。 如何实际创建一个带有代理对的字符串,以便我自己可以看到失败?

哪个.NET平台以及哪个版本的Windows在字符类方面支持哪个版本的Unicode?

更新了问题¹ 关于字符类,比较,排序,规范化和排序规则,哪些.NET平台支持哪些Unicode版本? 原始问题 我记得有些模糊地读过.NET支持Unicode 3.0版,内部UTF-16编码不是真正的UTF-16,但实际上使用的是UCS-2,这是不一样的。 例如,似乎U + FFFF以上的字符是不可能的,即考虑: string s = “\u1D7D9”; // (“Mathematical double-struck digit one”) 它存储字符串”ᵽ9″ 。 我基本上是在寻找以下答案的确切参考: 如果在.NET中不是真正的UTF-16,它是什么? .NET支持哪个版本的Unicode? 如果在不久的将来不支持或计划最新版本,是否有人知道(非)商业库或我如何解决此问题? ¹)我随着时间的推移更新了问题,对于答案和更大的社区来说似乎更合适。 我留下原来的问题来代替评论中回答了哪些部分。 在现有的32位Windows版本中也使用了旧的UCS-2(没有代理),.NET一直在内部使用UTF-16(带有代理)。

如何反转包含代理项对的字符串

我写过这个方法来反转一个字符串 public string Reverse(string s) { if(string.IsNullOrEmpty(s)) return s; TextElementEnumerator enumerator = StringInfo.GetTextElementEnumerator(s); var elements = new List(); while (enumerator.MoveNext()) { var cs = enumerator.GetTextElement().ToCharArray(); if (cs.Length > 1) { elements.AddRange(cs.Reverse()); } else { elements.AddRange(cs); } } elements.Reverse(); return string.Concat(elements); } 现在,我不想开始讨论如何提高代码效率或者如何使用一个代替我的代码。 我知道你可以执行Xors和各种其他事情来改进这段代码。 如果我想稍后重构代码,我可以轻松地完成,因为我有unit testing。 目前,这正确地反转了BML字符串(包括带有像”Les Misérables” “Les Mise\u0301rables”这样的重音符号的字符串)和包含组合字符的字符串,例如”Les Mise\u0301rables” 。 我的测试包含代理对,如果它们表达如此 Assert.AreEqual(“𠈓”, _stringOperations.Reverse(“𠈓”)); 但如果我表达这样的代理人对 […]

在SQL Server 2008中的NVarChar中存储UTF-8时遇到问题

我正在从网站上使用System.Net.WebClient提取数据,当数据返回时,除了带重音的字母外,所有内容都会解析并且看起来很好。 例如,当它返回é ,SQL Server 2008将其保存为é 。 只需要弄清楚如何将这些UTF-8字符转换为SQL Server可以读取的内容。 我将它存储在NVARCHAR(MAX)数据类型中。 如果你好奇,我正在使用Linq-to-SQL插入数据库。 有什么想法,我可以做到将其转换为正确的格式?

使用.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!"); } } 但是,由于这种非常大的字符分裂,这不起作用。 如何修改它以使其工作?