他们之间是可以通过to_sym 和 to_s 之间来转换的
:username.to_s
username
'username'.to_sym
:username
2, 相同的符号代表的一定是同一个对象,相同的字符串代表的不一定是同一个对象
这个是最大的区别,符号是不可更改的,字符串是可以修改的、
3,性能上,符号更加占优
正是因为符号不可变,而字符串变量必须具有含有修改其类容的功能,所以系统开销比较大,所以一般遇到不需要修改的文本信息时,建议使用符号。
可以使用正规表达式中的 \p{}, utf编码属性(有许多,具体有有哪些,分别代表什么,你得去查一下)汉字的p 属性好像是 Han
实例如下: 'abc汉字abc' =~ /\p{Han}/, 我在ruby1.9.2的irb返回为3, 说明是可以的
如果你只是想在原始字节进行操作,你可以试试它的编码为ASCII-8BIT /二进制。str.force_encoding("BINARY").split("n")
这不会让你的U回来,不过,因为在这种情况下,源字符串为ISO-8859(或喜欢):
"- Men\xFC -".force_encoding("ISO-8859-1").encode("UTF-8")
=>"- Menü -"
如果你想获得multibyte字符,你必须知道的源字符集是什么。
一旦你force_encoding如果数据是从您的数据库,你可以改变你的ASCII-8BIT或二进制编码ruby应该举报他们据此即可。或者,您可以monkeypatch数据库驱动程序来强制编码的读取它的所有字符串。这是一个巨大的,虽然,可能是完全错误的做法。
正确的答案将是解决你的字符串编码。这可能需要它们的数据库修复,数据库驱动程序连接的编码修复,或combinations。所有的字节仍然存在,但如果你正在处理一个给定的字符集,你应该,如果可能的话,让ruby知道,你希望你的数据在该编码。错误是mysql2驱动程序连接到已在拉丁文编码数据的MySQL数据库,但要指定UTF-8字符集进行连接。该导轨从DB取拉丁文的数据并把它解释为UTF-8,而不是将其解释为拉丁文,然后可以转换为UTF-8。
如果你能在这里阐述的字符串中,答案是可能的。您也可以看看这个答案的可能的全局(-ish)Rails的解决方案,默认字符串编码。