`

谨慎使用Encoding.Default

    博客分类:
  • C#
阅读更多

     在处理文本时,经常需要处理Encoding的概念。存在这个问题的原因在于,在.NET程序内文本只是string和char对象,而保存到硬盘时,或者准备用socket把它发送出去时,都得先转换成byte[]或者字节流。而转换的算法,就是Encoding。Encoding不同文本文件的行数也不同。

老外的程序里面,都喜欢用Encoding.ASCII,这是因为他们主要只使用western字符;于是我们经常要在他们的代码把Encoding.ASCII替换成Encoding.Default才能使用。

所谓Encoding.Default,是指当前系统设置的“默认字符集编码方式”。你可以通过控制面板里面的区域选项设置它(这是在我的机器上的设定):



 

 

注意红色方框内的部分,“为你的非Unicode程序选择一个语言来匹配其本地语言版本”。这里选择了Chinese (PRC),则Encoding.Default等效于Encoding.GetEncoding("gb2312")。gb2312在代码页936,所以所有以双字节编码(ANSI编码)字符的程序在这个系统上会使用936代码页,使用Unicode的不受影响。

你可以看到 Encoding.Default的值是和系统设定相关的。这样,有些时候会出问题:一台机器用socket发送一段文本到另一台机器,两边都设定编码方式为Encoding.Default,但两台机器的区域选项的这个设置是不一样的,却没有被注意;如果发送的是非western字符,则接受方必然会得到乱码。这种问题往往会令人很困惑。

所以在面对中文且为ANSI编码的情况下,最好不要用Encoding.Default,而用 Encoding.GetEncoding("gb2312"),或者更直接的Encoding.GetEncoding(936);而如果有可能的话,最好全部使用unicode,比如utf-8,也就是Encoding.UTF8。有了unicode之后,其实我们不需要代码页的概念。

 

  • 大小: 81.1 KB
分享到:
评论

相关推荐

    文件转换成字符存数据库

    return System.Text.Encoding.Default.GetString(arrFile); } ``` 上述代码实现了将文件转换为字符串的功能。其中,`FileToByteString`函数接受一个路径参数,返回该路径下文件转换后的字符串表示。 #### 字符串...

    C# Desc加密算法

    byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt); des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); MemoryStream ms = new MemoryStream(); ...

    unicode 转ansi格式

    在 .NET 中,`System.Text.Encoding` 类提供了转换功能,如 `Encoding.Unicode.GetBytes` 和 `Encoding.Default.GetString`。 4. **实际应用** - 文件读写:在处理文本文件时,如果文件以 ANSI 格式保存,但程序...

    如何用Response.Redirect方法传递汉字

    autoEventWireup="false" codeFile="Default.aspx.cs" contentType="text/html" targetSchema="http://schemas.microsoft.com/AspNet/2.0/Configuration/PagesSchema"> <!-- 其他配置 --> </system.web> ``...

    asp.net非常实用语句

    StreamReader sr = new StreamReader(str, System.Text.Encoding.Default); ``` 这段代码展示了如何使用`.NET`框架中的`WebRequest`和`WebResponse`类发起HTTP请求并获取响应。它用于从远程服务器下载资源,如网页...

    IOS 下实现文件管理器

    首先,我们需要使用`FileManager.default.urls(for:in:)`获取沙盒内的文件URL,然后使用`createFile(atPath:contents:attributes:)`等方法进行文件操作。 3. **显示文件系统内容**:可以使用`FileManager`的`...

    asp.net实现的DES加密解密操作示例

    示例代码中使用了Encoding.Default,意味着使用了系统默认的ANSI编码方式。在实际应用中,应当根据需求选择合适的编码方式。 4. 密钥和偏移量(IV): 在示例代码中,定义了一个8字节(64位)的数组作为密钥,密钥...

    MySQL读取Binlog日志常见的3种错误

    当在`my.cnf`配置文件中设置`default-character-set=utf8mb4`后,尝试使用`mysqlbinlog`工具查看binlog时,会遇到此错误。这是因为`mysqlbinlog`不识别这个变量。为了解决这个问题,可以执行如下命令: ```bash /...

    PHP 与 UTF-8 的最佳实践详细介绍

    - **谨慎使用`mb_detect_encoding()`**:该函数可能不准确,尽量避免依赖其自动检测编码,而应明确指定编码。 总的来说,PHP与UTF-8的最佳实践是确保编码的一致性和明确性,从输入到处理再到输出,每个环节都要有...

    Python中69个函数意义及运行实例汇总.pdf

    需要注意的是,`eval`可以执行任何Python代码,因此在不安全的环境中使用时需谨慎。 20. `exec(object[, globals[, locals]])`:执行动态语句块,`globals`和`locals`用于指定全局和局部变量的环境。 21. `filter...

    js跨域和ajax 跨域问题的实现思路

    System.IO.StreamReader sr = new System.IO.StreamReader(iStream, System.Text.Encoding.Default); string str = sr.ReadToEnd(); sr.Close(); iStream.Close(); webResponse.Close(); return str; } ``` 在...

    source insight 源码UFT8乱码转换

    4. 在“Default CharSet”(默认字符集)下拉菜单中,选择“Unicode (UTF-8 without BOM)”。 5. 点击“OK”保存设置。此时,Source Insight应能正确识别UTF-8编码的源码文件。 **解决方案二:使用外部工具转换编码...

    Java中的字符编码问题处理心得总结

    - `String(byte[] bytes)`:默认使用平台的默认字符集,可以通过`System.getProperty("file.encoding")`或`Charset.defaultCharset()`获取。 - `String(byte[] bytes, Charset charset)`:指定字符集进行解码。 -...

    网页乱码问题的解决方案

    6. **字符编码转换**:如果确实存在不同编码的数据,使用PHP函数如`iconv()`或`mb_convert_encoding()`进行编码转换,但应谨慎操作,避免转换错误。 #### 四、实例演示 假设数据库编码为`UTF-8`,页面和PHP代码也...

    C# 根据ip获取城市等相关信息

    StreamReader sr = new StreamReader(s, Encoding.Default); str = sr.ReadToEnd(); } catch (Exception e) { } return str; } ``` ### 注意事项 1. **网络异常处理**:在进行网络操作时,需要妥善处理可能...

    Python设置默认编码为utf8的方法

    sys.setdefaultencoding('utf-8') # set default encoding to utf-8 ``` 这样,每次启动Python时,设置就会自动生效。 为了确保编码设置已生效,可以运行Python解释器并在交互式模式下检查默认编码: ```...

    Intellij IDEA常用配置详解

    - **FILE** -> **SETTINGS** -> **FILE ENCODINGS** -> **DEFAULT ENCODING FOR PROPERTIES FILES** **步骤 3: 设置编译时的编码** - **FILE** -> **SETTINGS** -> **COMPILER** -> **JAVA COMPILER** -> **...

    python3读取MySQL-Front的MYSQL密码

    <default>127.0.0.1</default> <lastlogin>42847.9391816088 <manualurl version="5.0.22-community-nt"></manualurl> <database></database> <host>127.0.0.1 <filename>libMySQL.dll <tunnel_url></...

    php数组编码转换示例详解

    因此,在实际应用中,应谨慎使用。 此外,还可以探索使用递归方法遍历数组并逐个元素进行转换,但这可能导致性能下降,特别是对于大型或多维数组。PHP提供了一些内置的编码转换函数,如`mb_convert_encoding`和`...

Global site tag (gtag.js) - Google Analytics