2010-06-30 3 views
1

J'ai un champ dans mon modèle Rails qui a une longueur maximale de 255.Comment obtenir une sous-chaîne Ruby d'une chaîne Unicode?

J'importe des données, et parfois les données importées ont une longueur> 255. Je suis prêt à tout simplement le couper que je me retrouve avec la plus grande chaîne valide possible.

J'ai essayé à l'origine de faire le champ [0,255] afin d'obtenir ceci, mais cela effacera réellement l'Unicode à la fin d'un caractère. Lorsque je vais ensuite enregistrer cela dans la base de données, une erreur me dit que j'ai un caractère invalide en raison du caractère qui a été divisé ou divisé en deux.

Quelle est la méthode recommandée pour couper les caractères Unicode pour les faire tenir dans mon espace, sans couper les caractères individuels?

Répondre

2

Uh. On dirait que tronqué et amis aiment jouer avec chars, mais pas leurs petits cousins ​​bytes. Voici une réponse rapide pour votre problème, mais je ne sais pas s'il y a un plus straighforward et élégante question Je veux dire répondre

def truncate_bytes(string, size) 
    count = 0 
    string.chars.take_while{|c| (a += c.bytes.to_a.length) <= size }.join 
end 

Donnez un coup d'oeil à la Chars class of ActiveSupport.

Questions connexes