# Convert accentend chars to their base

**URL:** <https://www.ruby-forum.com/t/convert-accentend-chars-to-their-base/188334>\
**Category:** Rails\
**Created:** [May 10, 2010, 12:17pm UTC](https://www.ruby-forum.com/t/convert-accentend-chars-to-their-base/188334 "2010-05-10T12:17:23Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![eugenio](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/ec9cab/32.png) [@eugenio](https://www.ruby-forum.com/u/eugenio)\
**Post date:** [May 10, 2010, 12:17pm UTC](https://www.ruby-forum.com/t/convert-accentend-chars-to-their-base/188334/1 "2010-05-10T12:17:23Z")

</div>

is there a good way to convert “special” accented chars to their base  
chars?  
as an example i want “àéìòù” =\> “aeiou”  
i’m using several gsub now  
“àèìòù”.gsub(“à”,“a”).gsub(“è”,“e”).gsub(“ì”,“i”)…  
it works but i wonder if there is something better than this.

---

<div class="post-metadata">

**Author:** ![eugenio](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/ec9cab/32.png) [@eugenio](https://www.ruby-forum.com/u/eugenio)\
**Post date:** [May 10, 2010, 12:51pm UTC](https://www.ruby-forum.com/t/convert-accentend-chars-to-their-base/188334/2 "2010-05-10T12:51:55Z")

</div>

Well something like

char\_from = “Ã Ã©Ã¬Ã²Ã¹”  
char\_to = “aeiou”

x = “Ã Ã©Ã¬Ã²Ã¹”.gsub(char\_from, char\_to)  
puts x

would at least make the code more maintainable

---

<div class="post-metadata">

**Author:** ![eugenio](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/ec9cab/32.png) [@eugenio](https://www.ruby-forum.com/u/eugenio)\
**Post date:** [May 10, 2010, 1:03pm UTC](https://www.ruby-forum.com/t/convert-accentend-chars-to-their-base/188334/3 "2010-05-10T13:03:02Z")

</div>

your code convert only that sequence of character. what i need is to  
convert those accented char in every word.  
so “città” =\> “citta”, “caffè” =\> “caffe” and so on  
maybe some regexp?

On 10 Mag, 12:50, Peter H. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![eugenio](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/ec9cab/32.png) [@eugenio](https://www.ruby-forum.com/u/eugenio)\
**Post date:** [May 10, 2010, 1:20pm UTC](https://www.ruby-forum.com/t/convert-accentend-chars-to-their-base/188334/4 "2010-05-10T13:20:01Z")

</div>

Mmm

Just noticed another problem

char\_from = “Ã Ã©Ã¬Ã²Ã¹”  
char\_to = “aeiou”

puts char\_from.size =\> 10  
puts char\_to.size =\> 5

At least on my Mac. The problem here is encoding.

Looks trickier than I first thought, would be a cinch if this was  
unicode  
and we were using Java 🙂 Just decompose the unicode character and drop  
the  
accent characters.

Ignore everything I have said and lets hope someone who knows about this  
can  
suggest a solution, I am intrigued by this.

---

<div class="post-metadata">

**Author:** ![eugenio](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/ec9cab/32.png) [@eugenio](https://www.ruby-forum.com/u/eugenio)\
**Post date:** [May 10, 2010, 2:41pm UTC](https://www.ruby-forum.com/t/convert-accentend-chars-to-their-base/188334/5 "2010-05-10T14:41:24Z")

</div>

I’m having this very same problem when String.upcase() is not  
uppercasing accentuated characters.  
It seems that the problem is the encoding again.

regards

2010/5/10 Peter H. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> suggest a solution, I am intrigued by this.
> 
> –  
> You received this message because you are subscribed to the Google G.  
> “Ruby on Rails: Talk” group.  
> To post to this group, send email to removed\_email\_address@domain.invalid.  
> To unsubscribe from this group, send email to  
> removed\_email\_address@domain.invalid.  
> For more options, visit this group at  
> [http://groups.google.com/group/rubyonrails-talk?hl=en](http://groups.google.com/group/rubyonrails-talk?hl=en).

## –

Oliver Hernàndez Valls

[http://codit.wikidot.com](http://codit.wikidot.com)  
[http://wiki.tramuntanal.cat](http://wiki.tramuntanal.cat)

---

<div class="post-metadata">

**Author:** ![eugenio](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/ec9cab/32.png) [@eugenio](https://www.ruby-forum.com/u/eugenio)\
**Post date:** [May 10, 2010, 4:34pm UTC](https://www.ruby-forum.com/t/convert-accentend-chars-to-their-base/188334/6 "2010-05-10T16:34:12Z")

</div>

eugenio wrote:

> your code convert only that sequence of character. what i need is to  
> convert those accented char in every word.  
> so “cittï¿½” =\> “citta”, “caffï¿½” =\> “caffe” and so on  
> maybe some regexp?

You’ll probably have to convert your text to normal form D or KD, then  
filter out combining marks.

## Best,

Marnen Laibow-Koser  
[http://www.marnen.org](http://www.marnen.org)  
removed\_email\_address@domain.invalid
