Tag: utf 8

通过StringBuilder将字节顺序标记添加到字符串

如何向StringBuilder添加字节顺序标记? (我必须将一个字符串传递给另一个将其保存为文件的方法,但我无法修改该方法)。 我试过这个: var sb = new StringBuilder(); sb.Append(‘\xEF’); sb.Append(‘\xBB’); sb.Append(‘\xBF’); 但是当我用hex编辑器查看它时,它添加了以下序列: C3 AF C2 BB C2 BF 字符串很大,所以不用来回转换为字节数组就可以了。 编辑:在评论中提问后澄清。 我必须将字符串传递给另一个方法,该方法接受一个字符串并在Azure Blob存储上创建它的文件。 我无法修改其他方法。

从服务器解析UTF8 JSON响应

我正面临一个从我的服务器解析JSON响应的奇怪问题。 在过去几个月以这种方式获得响应(使用Content-Type:text / html)时,它一直运行良好: string response = “”; using (var client = new System.Net.Http.HttpClient()) { var postData = new System.Net.Http.FormUrlEncodedContent(data); var clientResult = await client.PostAsync(url, postData); if(clientResult.IsSuccessStatusCode) { response = await clientResult.Content.ReadAsStringAsync(); } } //Parse the response to a JObject… 但是当收到Content-Type:text / html的回复时; charset = utf8会抛出Content-Type无效的exception。 Exception message: The character set provided in ContentType is […]

Encoding.UTF8.GetBytes和UTF8Encoding.Default.GetBytes之间的区别

有人可以解释我有什么不同的赌注。 Encoding.UTF8.GetBytes和UTF8Encoding.Default.GetBytes? 实际上我正在尝试将XML字符串转换为流对象,现在发生的是每当我使用此行时: MemoryStream stream = new MemoryStream(UTF8Encoding.Default.GetBytes(xml)); 它给我一个错误“System.Xml.XmlException:给定编码中的无效字符” 但是当我使用这一行时,它工作正常: **MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(xml));** 即使它在两种情况下似乎都是UTF8编码,但是其中一种是有效的,另一种则不然?

如何删除存在于某些文本中的任何UTF-8 BOM,而不是在某些文本的开头

我们收到一些文件,这些文件已被另一方联系起来。 在这些文件的中间是一些BOM字符。 有没有办法可以检测到这3个字符并删除它们? 我已经看到很多关于如何从-start-文件中删除BOM的例子……但不是中间的。

在Windows窗体中使用SHA-256散列文本

String inputPass = textBox2.Text; byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(inputPass); byte[] inputHashedBytes = Sha256.ComputeHash(inputBytes); String inputHash = Convert.ToBase64String(inputHashedBytes); 我得到一些奇怪的输出: Q9nXCEhAn7RkIOVgBbBeOd5LiH7FWFtDFJ22TMLSoH8 = 通过输出哈希看起来像这样: 43d9d70828409fb46420e56005b05e38de4b887ec5585b43149db64cc2d2a07f

C#回调接收UTF8字符串

我有一个C#函数,一个回调,从用C ++编写的Win32 DLL调用。 调用者给了我一个UTF8字符串,但是我无法正确接收它,所有匈牙利语特殊字符都出错了。 [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int func_writeLog(string s); 当我将参数类型更改为IntPtr并编写代码时,它会正确写入。 但我发现这是一个非常缓慢的解决方案: byte[] bb = new byte[1000]; int i = 0; while (true) { byte b = Marshal.ReadByte(pstr, i); bb[i] = b; if (b == 0) break; i++; } System.Text.UTF8Encoding encodin = new System.Text.UTF8Encoding(); var sd = encodin.GetString(bb, 0, i); 我试着给string参数写一些属性,比如: [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int […]

将url从utf-8编码重新编码为iso-8859-1编码

我有文件://链接非英文字符,这些字符是以UTF-8编写的UrlEncoded。 要使这些链接在浏览器中工作,我必须重新编码它们。 file://development/H%C3%A5ndplukket.doc 变 file://development/H%e5ndplukket.doc 我有以下代码可行: public string ReEncodeUrl(string url) { Encoding enc = Encoding.GetEncoding(“iso-8859-1”); string[] parts = url.Split(‘/’); for (int i = 1; i < parts.Length; i++) { parts[i] = HttpUtility.UrlDecode(parts[i]); // Decode to string parts[i] = HttpUtility.UrlEncode(parts[i], enc); // Re-encode to latin1 parts[i] = parts[i].Replace('+', ' '); // Change + to [space] } […]

如何让SWIG处理C#中的utf8字符串?

我正在编写一个可移植的C ++库,它绑定到其他语言(java,C#,python)。 我正在SWIG的帮助下制作那些绑定。 我有一个用C ++编写的类: class MyClass { public: const char* get_value() const; // returns utf8-string void set_value(const char* value); // gets utf8-string private: // … }; 我在C#方面有类似的东西: public class MyClass { public string get_value(); public void set_value(string value); } SWIG做得很好,除了它在调用MyClass期间没有进行utf8 utf16字符串转换。 我该怎么办? 编写自定义类型映射看起来有点复杂,如果它是唯一可用的解决方案,我需要帮助。

包含UTF-8字符的批处理文件中的命令行参数会导致问题

我写了一个小实用程序,它将路径作为命令行参数,但是如果(并且仅当)该参数从批处理文件传递并且包含像Umlauts这样的UTF-8字符时我遇到了麻烦(不幸的是,这种情况很常见)系统语言是德语)。 我可以从项目调试属性传递文件名和Umlaut,没问题。 我可以从命令行传递文件名和Umlaut,没问题。 我从批处理文件传递文件名与Umlaut,混乱。 显然,我已经尝试将批处理文件保存为UTF-8编码…但是这样的事情就不会执行任何命令。 实际的程序是用C#编写的。 在批处理文件或代码端,我有哪些选项可以正确处理这些参数?

在c#中编码和解码是否安全?

在c#中,我可以通过Encoding.UTF8.GetString()编码二进制数据,然后通过binary = Encoding.UTF8.GetBytes()将其转换回来。 我希望结果在任何情况下都应该是我原来的二进制数据 – 没有例外。 但无论如何这是真的吗? 或者它取决于UTF8字符集的特定行为? 或者我应该更好地使用Encoding.ASCII.GetString()和Encoding.ASCII.GetBytes() ? 如果有人知道Encoding究竟做了什么(它如何处理特殊字符或特殊字节)那么请给我建议。