文本编码
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
【讨论】:
以上是关于文本编码的主要内容,如果未能解决你的问题,请参考以下文章