已经有一个非常类似的问题了。其中一个解决方案使用了类似这样的代码:
string.mb_chars.normalize(:kd).gsub(/[^x00-\x7F]/n, '').to_s
这个方法非常有效,但你会发现它还会删除空格、点、破折号等其他字符。
我不太确定第一个代码是如何工作的,但是否可以仅剥离重音符号?或者至少给出要保留的字符列表?我对正则表达式的了解很小,但我尝试过以下内容(没有成功):
/[^\-x00-\x7F]/n # So it would leave the dash alone
我即将做这样的事情:
string.mb_chars.normalize(:kd).gsub('-', '__DASH__').gsub
(/[^x00-\x7F]/n, '').gsub('__DASH__', '-').to_s
糟糕?是的...
我也尝试过:
iconv = Iconv.new('UTF-8', 'US-ASCII//TRANSLIT') # Also tried ISO-8859-1
iconv.iconv 'Café' # Throws an error: Iconv::IllegalSequence: "é"
求助?