精华内容
下载资源
问答
  • 是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在...

    参考文献:http://csumissu.iteye.com/blog/1090053

    UTF-8:Unicode Transformation Format-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。

     

    GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。

     

    GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:
    GBK、GB2312--Unicode--UTF8

     


    UTF8--Unicode--GBK、GB2312

     

     

    对于一个网站、论坛来说,如果英文字符较多,则建议使用UTF-8节省空间。不过现在很多论坛的插件一般只支持GBK。

    GB2312是GBK的子集,GBK是GB18030的子集
    GBK是包括中日韩字符的大字符集合
    如果是中文的网站 推荐GB2312 GBK有时还是有点问题
    为了避免所有乱码问题,应该采用UTF-8,将来要支持国际化也非常方便
    UTF-8可以看作是大字符集,它包含了大部分文字的编码。
    使用UTF-8的一个好处是其他地区的用户(如香港台湾)无需安装简体中文支持就能正常观看你的文字而不会出现乱码。

     

    gb2312是简体中文的码
    gbk支持简体中文及繁体中文
    big5支持繁体中文
    utf-8支持几乎所有字符

     

     

    MySQL 5.0以上的版本:

    1.一个汉字占多少长度与编码有关:

    UTF-8:一个汉字=3个字节

    GBK:一个汉字=2个字节

     

    2.varchar(n)表示n个字符,无论汉字和英文,Mysql都能存入n个字符,仅是实际字节长度有所区别

     

    3.MySQL检查长度,可用SQL语言:

    select LENGTH(fieldname) from tablename 来查看

    转载于:https://www.cnblogs.com/942267027wzmblog/p/5629388.html

    展开全文
  • varchar (n):可变长度字符串,长度可以指定为0到65535之间的值(实际上由于字符数大于255后保存字符长度需要2个字节,所以长度最大可为65533字节)。 VARCHAR的有效最大长度取决于最大行大小(65535字节,在所有列...

    char (n): 固定长度字符串,n 表示要存储的最大字符数(不是字节),范围( 0 ~ 255 )
    varchar (n):可变长度字符串,长度可以指定为0到65535之间的值(实际上由于字符数大于255后保存字符长度需要2个字节,所以长度最大可为65533字节)。 VARCHAR的有效最大长度取决于最大行大小(65535字节,在所有列之间共享)和所使用的字符集。

    一个汉字占多少长度与编码有关:

    1. UTF-8:一个汉字 = 3个字节,英文是一个字节
    2. GBK: 一个汉字 = 2个字节,英文是一个字节
    3. utf8mb4: 一个汉字 = 4个字节,英文是一个字节
      varchar(n) 表示n个字符,无论汉字和英文,MySql都能存入 n 个字符,仅实际字节长度有所区别。
      MySQL检查长度,可用 SQL 语句 SELECT LENGTH(fieldname) FROM tablename
      在 utf-8 字符集中,最多可以存储(65535 -2) / 3 = 21844 个汉字
      在 gbk 字符集中,最多可以存储(65535 - 2) / 2 = 32766 个汉字
    展开全文
  • java 字符和字节的关系

    千次阅读 2014-11-02 22:16:37
     Java中中英文分别占几个字节?如果数据量很大,或者存储空间不足的时候,可能需要考虑字节的占用大小,用于估计使用机器的数量。 方案:  很简单的:  1个字符=2个字节  1个字节=8位  1个英文...

    问题:

        Java中中英文分别占几个字节?如果数据量很大,或者存储空间不足的时候,可能需要考虑字节的占用大小,用于估计使用机器的数量。

    方案:

        很简单的:

            1个字符=2个字节

            1个字节=8位

        1个英文字符占一个字节,也就是0.5个字符

        1个中文字符占2-4个字节,这个需要区分编码情况,具体如下:

            UTF8编码下: 1个中文字符占3个字节(少数占4个字节)

            GBK编码下:  1个中文字符占2个字节

            UTF16编码下:1个中文字符占2个字节,Unicode扩展区的一些汉字存储需要4个字节


    上面其实不好记,最好的方法是放到程序里面去实际运行一下看看。

    例子:

        

    01 /**
    02  *
    03  * 描述:Java字符和字节测试例子
    04  * 类名:BytesDemo.java
    05  * @author dutycode
    06  * @weibo ideaduty
    07  * @email dutycode@gmail.com
    08  * @website http://www.dutycode.com
    09  * 2014-11-2
    10  * @version 1.0.1
    11  */
    12 public class BytesDemo {
    13  
    14     public static void main(String[] args) {
    15         String e1 = "english";
    16         String c1 = "中文";
    17          
    18         byte[] eb1 = e1.getBytes();
    19         byte[] cb1 = c1.getBytes();
    20          
    21         byte[] ebUTF8 = e1.getBytes(Charset.forName("utf8"));
    22         byte[] cbUTF8 = c1.getBytes(Charset.forName("utf8"));
    23          
    24         byte[] ebGbk = e1.getBytes(Charset.forName("gbk"));
    25         byte[] cbGbk = c1.getBytes(Charset.forName("gbk"));
    26          
    27         System.out.println("英文字符:" + eb1.length);
    28         System.out.println("中文字符,默认(UTF8):" + cb1.length);
    29         System.out.println("英文字符,(UTF8):" + ebUTF8.length);
    30         System.out.println("中文字符,(UTF8):" + cbUTF8.length);
    31         System.out.println("英文字符,(GBK):" + ebGbk.length);
    32         System.out.println("中文字符,(GBK):" + cbGbk.length);
    33     }
    34 }
    运行结果:


        QQ截图20141102214818.png

        

    展开全文
  • 中文字符和英文字符所占的字节长度是不一样,一个是2个字节,一个是1个字节,这给我们用英文的web框架开发中文app带来了麻烦。比如Django自带过滤器truncatewords并不支持截取中文,另外模型中CharField中的max_...

    中文字符和英文字符所占的字节长度是不一样,一个是2个字节,一个是1个字节,这给我们用英文的web框架开发中文app带来了麻烦。比如Django自带过滤器truncatewords并不支持截取中文,另外模型中CharField中的max_length选项用于限制中英混合字符串的长度基本上是失真的,需要额外自定义表单验证限制某些字段比如标题的长度。小编我今天就给大家分享几个例子和解决方案。

    我们同样以博客的Article模型为例,我们试图限制标题的最大长度为90 个字符。

    class Article(models.Model):

    """Article Model"""

    title = models.CharField('Title', max_length=90,db_index=True)

    90个英文字符也就是10来个单词,作为标题长度刚好合适。如果中文标题允许长达90个中文字符,这将是个恐怖的存在,也就意味着这里标题的长度限制对于中文或中英混杂字符串等于形同虚设。注意: Django CharField的max_length是按字符数来限制的,而不是字节数。同样Django的length模板过滤器和python的len函数默认也是统计字符数,而不是字节数。

    更好的解决方法?我们统计中英混合字符串的字节数,然后通过表单实现按字节数来限制,代码如下所示。我们先通过python的encode方法将混合字符串转化为二进制数据,再使用python的len方法统计字节长度。用该方法“我是a"会被统计成5,而不是3。该方法并不完美,但我们可以实现限制标题长度为90个英文字符或45个中文字符。

    class ArticleForm(forms.ModelForm):

    class Meta:

    model = Article

    exclude = ['author', ]

    def clean_title(self):

    title = self.cleaned_data['title']

    if len(title.encode('gb18030')) > 90: # 转成二进制统计字节 b'\xce\xd2\xca\xc7ab\xd6\xed')

    raise forms.ValidationError('The length of title must be shorter than 90 chars.')

    return title

    另一个例子是我们经常需要根据正文截取文中开头部分作为摘要,使用Django自带的模板过滤器truncatechars和truncatewords仅适用于罗马及英文字符的,但对中文字符串完全不适用,如下所示:

    {{ article.body|striptags|truncatewords:20 }}

    这是我们需要自定义模板过滤器截取中英混合字符串,网上已有现成可用代码,我在这里转贴给大家备用。如果你不知道如何自定义Django模板过滤器及如何使用它们,请强烈阅读本文Django基础(16): 模板标签(tags)的分类及如何自定义模板标签

    from django import template

    from django.template.defaultfilters import stringfilter

    register = template.Library()

    @register.filter

    @stringfilter

    def cut_str(str, length=10):

    """

    截取字符串,使得字符串长度等于length,并在字符串后加上省略号 """

    is_encode = False

    try:

    str_encode = str.encode('gb18030') #b'\xce\xd2\xca\xc7ab\xd6\xed'

    is_encode = True

    except:

    pass

    if is_encode:

    l = length*2

    if l < len(str_encode):

    l = l - 3

    str_encode = str_encode[:l]

    try:

    str = str_encode.decode('gb18030') + '...'

    except:

    str_encode = str_encode[:-1]

    try:

    str = str_encode.decode('gb18030') + '...'

    except:

    is_encode = False

    if not is_encode:

    if length < len(str):

    length = length - 2

    return str[:length] + '...'

    return str

    使用时先载入自定义标签,再按如下使用即可:

    {% load your_tags %}

    {{ article.body|striptags|cut_str:120 }}

    相关阅读Django基础(15): 模板过滤器(filter)的工作原理及如何自定义模板过滤器

    Django实战: 利用自定义模板标签实现仿CSDN博客月度归档

    Django实战专题: 开发专业博客(1)之内容管理后台开发

    大江狗 - 微信公众号【Python Web与Django开发】

    2020.2.15

    展开全文
  • 为什么1字节是8位

    2012-08-08 21:34:36
     2^1 = 2 可以表示 4 符号 2^2 = 4 可以表示 16 符号 2^3 = 8 可以表示 256 符号 2^4 = 16 可以表示 65536符号 考虑需要表示英文字符和数字以及一些符号的数量,大家认为用位来表示比较合适?...
  • 昨天晚上在微信上有人跟我说,他去中兴面试,面试官问了一个很变态的问题,问Java中的编码格式转换都有哪种方式?由于之前就知道String中的转换方式,还有...而且计算机存储信息的最小单位是一个字节8位,能够表...
  • 我们知道计算机存储信息的最小单位是一个字节8位,能够表示256个字符。这对于早起的英文来说足够了。即使是加上一些常见符号也足够。于是在1965年美国制定了ASCII编码,主要用于英语和西欧语言,一开始128个,后来加...
  • 什么是索引像素格式

    2019-07-28 15:02:03
    计算机存储空间的一个字节是8个比特,每个比特可以记录0和1两种状态,使用一个字节就可以存储256种状态,三个字节(24比特)就可以组合出常见的各种颜色了。 如果直接存储每个像素的RGB颜色值,每个像素都需要...
  • java基本数据类型

    2020-08-11 22:43:43
    java基本数据类型 Java有种基本数据类型?...在计算机内部,一个字节可以表示一个数据或者一个英文字母,但是一个汉字需要个字节表示。 1B=8bit 1Byte=8bit 1KB=1024Byte(字节)=8*1024bit 1MB=1024
  • 每一个符号在计算机物理层存储的都是二进制,但是有些字符像英文字母只需要用一个字节就能表示,有的符号可能要用很多字节表示,计算机无法知道哪个符号用几个字节表示,要是全部统一用固定字节就会造成大量的浪费,...
  • char 只能处理 ASCII 编码中的英文字符,是因为 char 类型太短,只有一个字节,容纳不下万个汉字,要想处理中文字符,必须得使用更长的数据类型。 一个字符在存储之前会转换成它在字符集中的编号,而这样的编号是...
  • 大部分C语言教材对中文字符的处理讳莫如深,甚至只字不提,导致很多初学者认为C语言...1) 足够长的数据类型char 只能处理 ASCII 编码中的英文字符,是因为 char 类型太短,只有一个字节,容纳不下我大中华万个汉...
  • 大部分C语言教材对中文字符的处理讳莫如深,甚至只字不提,导致很多初学者认为C语言...1) 足够长的数据类型char 只能处理 ASCII 编码中的英文字符,是因为 char 类型太短,只有一个字节,容纳不下我大中华万个汉...
  • 一、简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的...①ASCII编码中,一个英文字母(不分大小写)占用一个字节的空间,一个中文汉字占用两个字节的空间。一个二进
  • 昨天晚上在微信上有人跟我说,他去中兴面试,面试官问了一个很变态的问题,问Java中的编码格式转换都有哪种方式?由于之前就知道String中的转换方式,...而且计算机存储信息的最小单位是一个字节8位,能够表示25...
  • 为什么要写这部分笔记呢?因为生活在大中华地区,编程过程中铁定会遇上’中文’字符串,而存储跟...1)在计算机中8个比特(bit)作为一个字节byte,1个byte能表示的最大整数位255; 2)英文字母需用1个byte,用AS...
  • 这里ISO8859-1字符集只包含英文字符,使用一个字节存储。GB2312、GBK和GB18030字符集包含中文字符,他们都兼容ISO8859-1字符集,他们的字符存储格式是变长的,其中GB18030包含GBK,GBK包含GB2312。UN
  • 一种情况:就是4位字节文件大小的值,小于实际的文件大小值,这就需要搜索修正在Thumbs.db文件里找到了全部对应文件的文件名,是用Unicode字符存储在里面的,有的是单独的一个,有的是几个连续一起。
  • JAVA复习资料

    2012-07-30 16:16:52
    21、在Java的基本数据类型中,char型采用Unicode编码方案,每Unicode码字符占用 2 字节内存空间,这样,无论是中文字符还是英文字符,每都是占用2 字节内存空间。 22、在Java程序中定义的类有两种成员: 静态...
  • 计算机网络复习题

    2014-12-29 19:01:35
    计算机网络的体系结构通常分为几层,几个层次画在一起很象一个栈的结构。(2分) 协议数据单元:对等层次之间传送的数据单位(1分) 基带信号:来自信源的基本频带信号(1分) 带通信号:经过载波调制后的信号(1分...
  • 16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...
  • 操作系统(内存管理)

    热门讨论 2009-09-20 12:55:25
    然后,当通过 free() 将该指针传递回来时,我们只需要倒退几个内存字节就可以再次找到这个结构。 在讨论分配内存之前,我们将先讨论释放,因为它更简单。为了释放内存,我们必须要做的惟一一件事情就是,获得我们...
  • 利用逆波兰表达式作为中间临时输出以将一个源字符流按照给定运算规则计算出结果的过程大致可以分为:(1)转换逆波兰表达式(2)计算逆波兰表达式(3)用户实现接口几个过程。(其中逆波兰表达式可以有各种表示形式...
  • 会计理论考试题

    2012-03-07 21:04:40
    A、用英文字母“PI”代替B、右击“输入法状态”窗口中的软键盘按钮,然后选择希腊字母键盘 C、用电报码输人法输人 D、在“画笔”中,画出该字,再粘贴到文章中 28.Windows98中的文件系统结构是___C__形状。 A、网状 ...
  •  需要理解这高性能、无中心、弹性数据存储系统的应用架构师或数据架构师。  希望理解如何实现容错、最终一致的数据存储系统的标准关系型数据库系统管理员或开发者。  希望了解Cassandra 的优势(和不足)以及...
  • Linux 操作系统基础教程 清华大学信息学院计算机系 ...从网上下载的,但是我不推荐易用这种方法得到 Linux,因为仅仅核心就有 Mbit 的 数据量,而一完整的发行版本大概都是 1Gbit 左右的数据量...

空空如也

空空如也

1 2 3
收藏数 46
精华内容 18
关键字:

存储英文需要几个字节