使用C#网站(UTF-8、UTF-16)进行最佳编码-Bandwith

使用C#网站(UTF-8、UTF-16)进行最佳编码-Bandwith,c#,asp.net,encoding,C#,Asp.net,Encoding,我打算用C#(ASP.NET技术)、MySQL等开发一个网站 我的VPS中有一个有限的带宽,使用UTF-8编码,我将获得双带宽,而不是使用UTF-16 对于我的web和SQL查询(我将指定MySQL将使用UTF-8),我是否应该将C#的任何字符串(以及对于打印整数,如何转换?)转换为UTF-8(这不是一个漂亮的代码)(我将指定MySQL将使用UTF-8)?而对于英语/拉丁语字符,UTF-8使用的空间比UTF-16少,而HTML本身使用的编码对于带宽使用来说基本上是无关的1 中的图表表明,当使用U

我打算用C#(ASP.NET技术)、MySQL等开发一个网站

我的VPS中有一个有限的带宽,使用UTF-8编码,我将获得双带宽,而不是使用UTF-16


对于我的web和SQL查询(我将指定MySQL将使用UTF-8),我是否应该将C#的任何字符串(以及对于打印整数,如何转换?)转换为UTF-8(这不是一个漂亮的代码)(我将指定MySQL将使用UTF-8)?

而对于英语/拉丁语字符,UTF-8使用的空间比UTF-16少,而HTML本身使用的编码对于带宽使用来说基本上是无关的1

中的图表表明,当使用UTF-16而不是UTF-8时,较大的压缩Unicode文本只会消耗略多的字节(而不是接近“双字节”)

由于使用压缩将UTF-8编码文本的大小减少了一半以上,它最终确保了正确的HTTP压缩(和缓存)配置,这将减少带宽使用,而不是选择特定的编码1


(来源:)

不同的deflate实现可能会比.NET框架中的实现表现更好,而.NET框架远远不是一流的。HTTP服务器本身的一个方面中的HTTP压缩-例如,请参阅


1除了带宽要求外,有些人还提出了建议。另请参见。

ASP.NET默认使用UTF-8

.NET字符串在实现中始终是UTF-16,但在HTTP中使用的流之间来回移动时,默认使用UTF-8

4.1以上的MySQL默认使用UTF-8

编码得到了很好的支持

如果您大量使用UTF-8中比UTF-16大的字符,那么在默认设置为UTF-8的地方使用UTF-16可能有点道理,但请记住,在HTML中具有特殊含义的字符几乎都在U+0000–U+007F范围内(UTF-8中有一个八位组)而那些在UTF-8中比UTF-16占据更多八位字节的大多是非常简洁的亚洲表意文字,这导致在HTML中比在英语中占更大比例的内容标签。因此,即使您可能期望UTF-16更小,它通常也不会更小

实际上,除了在HTML、XML或任何其他文本或基于文本的web文档中使用UTF-8之外,没有任何理由在web上使用任何东西,除非是作为一种技术手段


只需使用默认值。

当涉及到带宽时,您会看到一个非常不相关的部分(实际上,上面的其他答案遵循了错误的假设)。网页的文本内容只占所有网络流量的百分之几,即使是小图像也需要几千字节的数据;一个普通的化身图像比所有的文本内容都要大。而且JavaScript通常比文本花费更多的流量


因此,请确保您的编码符合页面的文本要求,不要担心此处的带宽。

是的,但是。。。使用UTF-16的HTTP压缩将使用更多空间:)。此外,什么编码将使用SQL DB?只需在响应对象上设置编码:就DB而言,这取决于您的数据库提供程序等。但是,我只会使用提供程序支持的编码,即使这意味着“浪费空间”(即使用SQL Server)。最终不与体制抗争的痛苦会小得多。。。然后我将指定HTML文档使用UTF-8,我将使用C#(默认情况下:UTF-16),SQL表将使用UTF-16?对于一个大型数据库,UTF-16是一个。。。(双空格)。太好了。使用HTTP/S UTF-8。但是字符串(LINQ)默认使用UTF-16和MySQL,不是吗?我想有个问题。你认为这个问题是什么?嗯?我将把EVER查询转换为UTF-8-——不,只需使用ADO.NET、实体框架、Nhibernate或其他ORM。不需要自己转换查询。是的。事实上,最好不要在很多时候将.NET字符串视为UTF-16(除非您需要担心代理),就像作为字符串一样,因为它们是UTF-16是一个实现细节。在这和数据库中发生的事情之间移动是数据库驱动程序需要担心的。即使您决定在DB或HTTP中使用UTF-8以外的其他内容,也可以通过更改一个属性而不是自己实际执行编码。