来自documentation of Go's unicode
package:
func IsSpace
func IsSpace(r rune) bool
IsSpace报告符文是否是Unicode的White Space属性定义的空格字符;在Latin-1空间中,这是
'\t', '\n', '\v', '\f', '\r', ' ', U+0085 (NEL), U+00A0 (NBSP).
间距字符的其他定义由类别Z和属性Pattern_White_Space设置。
我的问题是:Z类别和Pattern_White_Space
设置“其他定义”是什么意思?这是否意味着调用unicode.IsSpace()
,检查字符是否属于Z类别,并检查字符是否在Pattern_White_Space
中会产生不同的结果吗?如果是,那么是差异?为什么会有差异?
答案 0 :(得分:1)
IsSpace函数将首先检查您的rune
是否在Latin1字符空间中。如果是,它将使用您列出的空格字符来确定白色间距。
如果没有,则调用isExcludingLatin
(http://golang.org/src/unicode/letter.go?h=isExcludingLatin#L170),如下所示:
170 func isExcludingLatin(rangeTab *RangeTable, r rune) bool {
171 r16 := rangeTab.R16
172 if off := rangeTab.LatinOffset; len(r16) > off && r <= rune(r16[len(r16)-1].Hi) {
173 return is16(r16[off:], uint16(r))
174 }
175 r32 := rangeTab.R32
176 if len(r32) > 0 && r >= rune(r32[0].Lo) {
177 return is32(r32, uint32(r))
178 }
179 return false
180 }
传入的*RangeTable
是White_Space
,其外观如下所示:
http://golang.org/src/unicode/tables.go?h=White_Space#L6069
6069 var _White_Space = &RangeTable{
6070 R16: []Range16{
6071 {0x0009, 0x000d, 1},
6072 {0x0020, 0x0020, 1},
6073 {0x0085, 0x0085, 1},
6074 {0x00a0, 0x00a0, 1},
6075 {0x1680, 0x1680, 1},
6076 {0x2000, 0x200a, 1},
6077 {0x2028, 0x2029, 1},
6078 {0x202f, 0x202f, 1},
6079 {0x205f, 0x205f, 1},
6080 {0x3000, 0x3000, 1},
6081 },
6082 LatinOffset: 4,
6083 }
要回答您的主要问题,IsSpace
检查不仅限于Latin-1。
修改强>
为了澄清,如果您正在测试的字符不在Latin-1字符集中,则使用范围表查找。表中的Range16
值表示16位数字的范围{Low,Hi,Stride}。 isExcludingLatin
将使用该范围表子区域is16
调用R16
,并确定提供的rune
是否落在{{1}索引之后的任何范围内(在这种情况下为4)。
所以,那就是检查这些范围:
LatinOffset
有以下的unicode代码点:
http://www.fileformat.info/info/unicode/char/1680/index.htm http://www.fileformat.info/info/unicode/char/2000/index.htm http://www.fileformat.info/info/unicode/char/2001/index.htm http://www.fileformat.info/info/unicode/char/2002/index.htm http://www.fileformat.info/info/unicode/char/2003/index.htm http://www.fileformat.info/info/unicode/char/2004/index.htm http://www.fileformat.info/info/unicode/char/2005/index.htm http://www.fileformat.info/info/unicode/char/2006/index.htm http://www.fileformat.info/info/unicode/char/2007/index.htm http://www.fileformat.info/info/unicode/char/2008/index.htm http://www.fileformat.info/info/unicode/char/2009/index.htm http://www.fileformat.info/info/unicode/char/200a/index.htm http://www.fileformat.info/info/unicode/char/2028/index.htm http://www.fileformat.info/info/unicode/char/2029/index.htm http://www.fileformat.info/info/unicode/char/202f/index.htm http://www.fileformat.info/info/unicode/char/205f/index.htm http://www.fileformat.info/info/unicode/char/3000/index.htm
以上所有都是“白色空间”