代码之家  ›  专栏  ›  技术社区  ›  Anindya Chatterjee

Unicode可打印字符的范围是多少?

  •  43
  • Anindya Chatterjee  · 技术社区  · 15 年前

    5 回复  |  直到 10 年前
        1
  •  21
  •   Lie Ryan Bryan    15 年前

    http://en.wikipedia.org/wiki/Unicode_control_characters

    您可能需要特别关注C0和C1控制字符 http://en.wikipedia.org/wiki/C0_and_C1_control_codes

    wiki上说,C0控制字符在U+0000U+001F和U+007F之间(与ASCII的范围相同),C1控制字符在U+0080U+009F之间

        2
  •  16
  •   leonbloy    15 年前

    首先,你应该去掉你问题中的“UTF8”这个词,它不相关(UTF8只是Unicode的编码之一,它与你的问题是正交的)。

    第二:“可打印/不可打印”在Unicode中的含义不太清楚。也许你是说 graphical character “人们甚至可以质疑一个空间是否可以打印/图形化。非图形字符基本上由控制字符组成:范围0x00-0x0f加上一些分散的字符。

    无论如何,绝大多数Unicode字符(超过200000个)都是“图形化的”。但这并不意味着它们可以在您的环境中打印。

    在我看来,这是一个坏主意,如果你打算生成一个“随机打印”unicode字符串,试图包括所有的“打印”字符。

        3
  •  14
  •   RedGrittyBrick    7 年前

    Unicode定义 properties for characters

    其中一个属性是“一般范畴”,它有主要的类和子类。主要的类有字母、标记、标点、符号、分隔符和其他。

    通过了解角色的属性,您可以决定是否将其视为可打印的 在你特定的背景下 .

    您必须始终记住,像“字符”和“可打印”这样的术语通常是困难的,并且具有有趣的边缘情况。


    例如,Go语言有一个“unicode”包,它提供了许多有用的unicode相关函数,包括以下两个:

    func IsGraphic(r rune) bool
    
    IsGraphic reports whether the rune is defined as a Graphic by Unicode. Such  
    characters include letters, marks, numbers, punctuation, symbols, and spaces, 
    from categories L, M, N, P, S, Zs. 
    
    func IsPrint(r rune) bool
    
    IsPrint reports whether the rune is defined as printable by Go. Such  
    characters include letters, marks, numbers, punctuation, symbols, and  
    the ASCII space character, from categories L, M, N, P, S and the ASCII  
    space character. This categorization is the same as IsGraphic except  
    that the only spacing character is ASCII space, U+0020.
    

    注意,它说的是“defined as printable by Go”,而不是“defined as printable by Unicode”。这几乎就像是有一些深度的巫师在Unicode不敢铅垂。


    零宽度空间是否可打印?何时可以打印连字符点?有哪些字符的印刷适性取决于它们在一个单词中的位置,或者取决于与它们相邻的字符?组合字符总是可以打印的吗?


    ASCII可打印字符范围为\u0020-\u007f

    不,不是。\u007f是DEL,通常不被认为是可打印字符。例如,它与标有“DEL”的键盘键相关联,其最早的目的是命令从某种介质(显示器、文件等)中删除字符。

        4
  •  5
  •   jkl    15 年前

        5
  •  0
  •   shubhajit22    5 年前

    在int数据类型中,可打印的Unicode字符范围(不包括十六进制)是32到126。

        6
  •  0
  •   HoldOffHunger Lux    5 年前

    哪些字符有效?

    U+0000 结束于 U+10FFFF . 第一个街区, 基础拉丁语 ,跨距 U+007F 最后一个街区, 辅助专用区-B U+100000 10FFFF . 如果要查看所有这些块,请参见此处: Wikipedia.org: Unicode Block; List of Blocks .

    让我们把拉丁语块1中有效/无效的东西分解一下。

    拉丁语块:TLDR

    如果您对过滤掉其中一个不可见的字符感兴趣,则需要过滤掉:

    • U+0000美元 U+0008
    • U+000E U+001F :设备(即控制)
    • 地面+007F
    • U+008D U+009F

    拉丁语块:全范围

    这是拉丁块,分成几个小部分。。。

    • U+0000美元
    • U+0009 U+000C
    • 地面+001F :设备(即控制)
    • U+0020 :空格
    • U+0021 U+002F :符号
    • U+0030 U+0039 :数字
    • U+003A U+0040 :符号
    • U+0041 U+005A :大写字母
    • U+005B U+0060 :符号
    • U+0061 U+007A :小写字母
    • U+007B U+007E
    • 地面+007F :删除(控件)
    • U+0080 U+008C :1补充符号。
    • 地面+008D 地面+009F :设备(即控制)
    • U+00A0 :不间断空格。(即。,   )
    • U+00A1 U+00BF :符号。
    • U+00C0 U+00FF :重音字符。

    其他街区

    wikipedia.org page

    拉丁1和拉丁1相关块

    • U+0000美元 地面+007F :基本拉丁语
    • U+00华氏度 :拉丁语-1增补
    • U+0100 U+017F :拉丁文扩展-A
    • U+0180 U+024F :拉丁文扩展-B

    U+0250 U+036F :3个街区。

    U+0370 U+1C7F :55块。

    非拉丁语,语言补充块

    U+1C80 U+209F :11个街区。

    U+20A0 U+2BFF

    古代语言块

    U+2C00 U+2C5F

    语言扩展块

    U+2C60 U+FFEF

    特殊砌块

    U+FFF0 U+FFFF :1块(特价)。

        7
  •  -7
  •   Wernight    15 年前

    Unicode ,stict term,没有范围。数字可以是无限的。

    至于范围,我认为没有可打印字符的范围。它总是在进化。请看我上面的那一页。