{"action":"closed","issue":{"url":"https://api.github.com/repos/JuliaLang/julia/issues/6165","labels_url":"https://api.github.com/repos/JuliaLang/julia/issues/6165/labels{/name}","comments_url":"https://api.github.com/repos/JuliaLang/julia/issues/6165/comments","events_url":"https://api.github.com/repos/JuliaLang/julia/issues/6165/events","html_url":"https://github.com/JuliaLang/julia/issues/6165","id":29410871,"number":6165,"title":"UTF-8 combining characters and normalization in reverse()","user":{"login":"andrioni","id":159177,"avatar_url":"https://avatars.githubusercontent.com/u/159177?v=3","gravatar_id":"","url":"https://api.github.com/users/andrioni","html_url":"https://github.com/andrioni","followers_url":"https://api.github.com/users/andrioni/followers","following_url":"https://api.github.com/users/andrioni/following{/other_user}","gists_url":"https://api.github.com/users/andrioni/gists{/gist_id}","starred_url":"https://api.github.com/users/andrioni/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andrioni/subscriptions","organizations_url":"https://api.github.com/users/andrioni/orgs","repos_url":"https://api.github.com/users/andrioni/repos","events_url":"https://api.github.com/users/andrioni/events{/privacy}","received_events_url":"https://api.github.com/users/andrioni/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/JuliaLang/julia/labels/breaking","name":"breaking","color":"800000"},{"url":"https://api.github.com/repos/JuliaLang/julia/labels/decision","name":"decision","color":"F08000"},{"url":"https://api.github.com/repos/JuliaLang/julia/labels/unicode","name":"unicode","color":"5f4a60"}],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":41,"created_at":"2014-03-14T04:47:25Z","updated_at":"2015-07-23T14:44:43Z","closed_at":"2015-07-23T14:44:43Z","body":"```julia\r\njulia> \"noe\\u0308l\"\r\n\"noël\"\r\n\r\njulia> reverse(\"noe\\u0308l\")\r\n\"l̈eon\"\r\n\r\njulia> length(\"noe\\u0308l\")\r\n5\r\n\r\njulia> uppercase(\"baﬄe\")\r\n\"BAﬄE\"\r\n```\r\n(it appears that Github also doesn't like them, [examples taken from here](http://mortoray.com/2013/11/27/the-string-type-is-broken/))\r\n\r\nBackspace support is also broken on the REPL: if you press backspace twice from \"noël\", it shows you \"no\", but actually represents \"noe\".\r\n\r\nWhat should be our approach in this case? NFKC does solve both issues above, but I'm not sure how good it is to normalize every string before operating on them:\r\n\r\n```julia\r\njulia> length(normalize_string(\"noe\\u0308l\", :NFKC))\r\n4\r\n\r\njulia> reverse(normalize_string(\"noe\\u0308l\", :NFKC))\r\n\"lëon\"\r\n\r\njulia> uppercase(normalize_string(\"baﬄe\", :NFKC))\r\n\"BAFFLE\"\r\n```\r\n\r\n(related to #5434, #5903)"}}