文本编码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文本编码相关的知识,希望对你有一定的参考价值。

参考技术A         计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。一个字节能表示的最大的整数就是255,如果要表示更大的整数,就必须用更多的字节。

●  ASCII编码:

        计算机是美国发明的,最开始只有127个字符(常用英文和符号),用一个字节就可以全部表示。

●  GB2312:

        汉子远不止127个,所以至少用两个字节表示。所以中国标准制定了GB2312,里面包含了常用的汉字。GBK基于GB2312,包含更多生僻字,支持简繁双体;GB18030基于GBK,包含更多生僻字,支持少数民族文字。

●  Unicode

        但是有些文章是多个国家混合语言的,全世界的语言两个字节无法全部表示。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。    

●  uft-8

        加入一篇文章主要是英文,只是混合了少量其他国家语言。这时候存储一个英文字符,本来只需要1个字节,用Unicode需要多个字节。所以出现了“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大我码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。    

        其他国家的用户无需安装中文支持就可以直接浏览utf-8的中文网站。

        在计算机内存中,统一用Unicode中编码,比如记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存或传输时再把Unicode转换为UTF-8。

        全角占两个字节,半角占一个字节,半角全角主要是针对标点符号来说的。不管全角半角汉字都占用两个字节。搜狗里用shift+space切换全角和半角。

        汉语等文字语言的字库量远大于256个,所以改用两个字节来储存。如果统一使用全角字符的话,排列起来也显得整齐,英文和其它拉丁文的字符和标点也提供了全角格式。如果全英文或系统命令就用半角即可。

.Net Core 3.1:不支持文本消息格式中使用的文本编码“iso-8859-1”。 (参数“编码”)

【中文标题】.Net Core 3.1:不支持文本消息格式中使用的文本编码“iso-8859-1”。 (参数“编码”)【英文标题】:.Net Core 3.1: The text encoding 'iso-8859-1' used in the text message format is not supported. (Parameter 'encoding') 【发布时间】:2020-08-20 02:35:12 【问题描述】:

我正在尝试使用 VS 2019、.net core 3 连接到编码 ISO-8859-1 的外部 Web 服务(该 Web 服务具有 PHP 实现)。我添加了 Connected Service。当使用编码创建新的基本 http 绑定时,我收到异常消息“不支持文本消息格式中使用的文本编码 'iso-8859-1'。(参数'编码')”。

***var binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport)
        
            MaxReceivedMessageSize = int.MaxValue,
            MaxBufferPoolSize = int.MaxValue,
            MaxBufferSize = int.MaxValue,
            ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max,
            AllowCookies = true,
            TextEncoding = Encoding.GetEncoding("ISO-8859-1"),
        ;***

我的错误是什么?

【问题讨论】:

【参考方案1】:

WCF 的 TextMessageEncodingBindingElement 仅支持 UTF-8、UTF-16 和大端 Unicode 编码。如果要使用 iso-8859-1 编码,可以考虑自定义消息编码器。 这是参考链接:

https://docs.microsoft.com/en-us/dotnet/framework/wcf/samples/custom-message-encoder-custom-text-encoder?redirectedfrom=MSDN

【讨论】:

以上是关于文本编码的主要内容,如果未能解决你的问题,请参考以下文章

如何检查TXT文本是否ANSI编码格式的?

下载不同编码的在线文本

java 怎么判断文本内容的编码格式

如何确定文本的编码?

尝试使用 Web api 从 Azure 队列中检索消息文本,但消息文本已编码。我如何删除编码

Python 读取文本文件编码错误解决方案(未知文本文件编码情况下解决方案)