2010-04-28 3 views
8

Как определить, является ли символ китайский символ, используя рубинКак определить, является ли символ китайский символ

+0

Они, как правило, имеют больше ударов, чем катакана или хирагана. И вы, как правило, должны использовать рубин только для более сложных иероглифов ... подождите немного, это переполнение японского языка или стека? –

ответ

5

Интересная статья о кодировках в Ruby:? http://blog.grayproductions.net/articles/bytes_and_characters_in_ruby_18 (это часть серии - также проверьте содержание в начале статьи)

Я еще не пользовался китайскими символами, но, похоже, это список, поддерживаемый unicode: http://en.wikipedia.org/wiki/List_of_CJK_Unified_Ideographs. Также обратите внимание, что это унифицированная система, включающая японские и корейские символы (некоторые символы разделены между ними) - не уверен, что вы можете отличить только китайские.

Я думаю, вы можете проверить, если это CJK характер, называя это на строку строка и символ с индексом п:

def check_char(str, n) 
    list_of_chars = str.unpack("U*") 
    char = list_of_chars[n] 
    #main blocks 
    if char >= 0x4E00 && char <= 0x9FFF 
    return true 
    end 
    #extended block A 
    if char >= 0x3400 && char <= 0x4DBF 
    return true 
    end 
    #extended block B 
    if char >= 0x20000 && char <= 0x2A6DF 
    return true 
    end 
    #extended block C 
    if char >= 0x2A700 && char <= 0x2B73F 
    return true 
    end 
    return false 
end 
+0

Большое спасибо – HelloWorld

+0

Это фактические диапазоны юникода для китайских символов? – s84

+0

@sam - это диапазоны CJK. Это китайские, японские и корейские символы (при условии, что диапазоны верны, и я считаю, что они) –

12

Руби 1,9

#encoding: utf-8 
"漢" =~ /\p{Han}/ 
+0

Я использую этот код, но он не может работать. Это информация об ошибке: недопустимое имя свойства символа {Han}:/\ p {Han}/ – HelloWorld

+1

@HelloWorld: обновите версию Ruby. Все классы символов задокументированы сейчас: http://github.com/ruby/ruby/blob/trunk/doc/re.rdoc (классный ник, BTW) –

+0

Ссылка выше не работает, но вы можете найти всю информацию в рубине docs for regexp: http://www.ruby-doc.org/core-2.0.0/Regexp.html#label-Character+Properties – deRailed