# What locale is for string-upcase?

**URL:** <https://racket.discourse.group/t/what-locale-is-for-string-upcase/2203>\
**Category:** Questions & Answers\
**Created:** [August 9, 2023, 12:36pm UTC](https://racket.discourse.group/t/what-locale-is-for-string-upcase/2203 "2023-08-09T12:36:51Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Kalimehtar](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/kalimehtar/32/394_2.png) [@Kalimehtar](https://racket.discourse.group/u/Kalimehtar)\
**Post date:** [August 9, 2023, 12:36pm UTC](https://racket.discourse.group/t/what-locale-is-for-string-upcase/2203/1 "2023-08-09T12:36:52Z")

</div>

```scheme
(parameterize ([current-locale #f])
  (string-locale-upcase "Straße"))
; => "STRAßE"
(string-upcase "Straße")
; => "STRASSE"

```

The documentation states, that `string-upcase` "uses Unicode’s locale-independent conversion rules".

And, that for `current-locale`

> when locale sensitivity is disabled by setting the parameter to #f, strings are compared, etc., in a fully portable manner, which is the same as the standard procedures.

But it doesn't work for me (Racket 8.9-cs, Window-x64). What value should I set to `current-locale`, to get "STRASSE" from `string-locale-upcase`?

---

<div class="post-metadata">

**Author:** ![soegaard](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/soegaard/32/19_2.png) [@soegaard](https://racket.discourse.group/u/soegaard)\
**Post date:** [August 9, 2023, 1:11pm UTC](https://racket.discourse.group/t/what-locale-is-for-string-upcase/2203/2 "2023-08-09T13:11:06Z")

</div>

FWIW

 ![image](https://global.discourse-cdn.com/free1/uploads/racket/original/2X/b/b7b08f354bbdd12ff713d1de3df8a198305574ad.png)

That's in a macOS terminal where `locale` reports:

```scheme
% locale
LANG=""
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

```

I tried some of these locales:

```scheme
% locale -a | grep de
de_CH
de_DE.UTF-8
de_AT.ISO8859-1
de_AT.UTF-8
de_AT.ISO8859-15
de_DE.ISO8859-15
de_CH.UTF-8
de_CH.ISO8859-15
de_DE.ISO8859-1
de_CH.ISO8859-1
de_AT
de_DE

```

but I couldn't see an effect.

---

<div class="post-metadata">

**Author:** ![EmEf](https://avatars.discourse-cdn.com/v4/letter/e/53a042/32.png) [@EmEf](https://racket.discourse.group/u/EmEf)\
**Post date:** [August 9, 2023, 1:29pm UTC](https://racket.discourse.group/t/what-locale-is-for-string-upcase/2203/3 "2023-08-09T13:29:27Z")

</div>

Isn’t this a special case of ‘Rechtschreibung’ in German? Technically Strasse is wrong (my remote recollection) and German considers the letter in STRAßE an uppercase s-z. (Don’t blame me. I have only one passport and it’s a US passport 🙂 I suspect @Mike Sperber knows better .. he was a professor in Germany.

— Matthias

---

<div class="post-metadata">

**Author:** ![benknoble](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/benknoble/32/16_2.png) [@benknoble](https://racket.discourse.group/u/benknoble)\
**Post date:** [August 9, 2023, 1:29pm UTC](https://racket.discourse.group/t/what-locale-is-for-string-upcase/2203/4 "2023-08-09T13:29:28Z")

</div>

In the future, could I convince you to avoid screenshots of text? 🙂 The utility `pbcopy` on macOS is a convenient way to copy outputs.

---

<div class="post-metadata">

**Author:** ![soegaard](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/soegaard/32/19_2.png) [@soegaard](https://racket.discourse.group/u/soegaard)\
**Post date:** [August 9, 2023, 2:19pm UTC](https://racket.discourse.group/t/what-locale-is-for-string-upcase/2203/5 "2023-08-09T14:19:22Z")

</div>

> Seit dem 29. Juni 2017 ist das große ß (ẞ) offiziell Bestandteil der amtlichen [deutschen Rechtschreibung](https://de.wikipedia.org/wiki/Deutsche_Rechtschreibung).[[10]](https://de.wikipedia.org/wiki/%C3%9F#cite_note-Amtliches_Regelwerk_der_deutschen_Rechtschreibung_aktualisiert-12)[[11]](https://de.wikipedia.org/wiki/%C3%9F#cite_note-Das_%C3%A4ndert_sich_sofort_an_unserer_Rechtschreibung-13) Damit ist seither zum Beispiel die Schreibweise STRAẞE gleichberechtigt neben der Schreibweise STRASSE zulässig.

Turns out the German rules changed in 2017.

---

<div class="post-metadata">

**Author:** ![Kalimehtar](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/kalimehtar/32/394_2.png) [@Kalimehtar](https://racket.discourse.group/u/Kalimehtar)\
**Post date:** [August 11, 2023, 4:52am UTC](https://racket.discourse.group/t/what-locale-is-for-string-upcase/2203/6 "2023-08-11T04:52:01Z")

</div>

So is it a bug in `string-upcase`? Or in the documentation for `current-locale`?

---

<div class="post-metadata">

**Author:** ![soegaard](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/soegaard/32/19_2.png) [@soegaard](https://racket.discourse.group/u/soegaard)\
**Post date:** [August 11, 2023, 11:39am UTC](https://racket.discourse.group/t/what-locale-is-for-string-upcase/2203/7 "2023-08-11T11:39:41Z")

</div>

It looks like a bug to me (but I am only 90% sure).

Regardless of whether the expected result is "STRAßE" or "STRASSE" I expect the results to be equal.

Also, I don't understand why I didn't see an effect of setting `current-locale`.

Are there other locale dependent non-eszett related words to test on?

---

<div class="post-metadata">

**Author:** ![Kalimehtar](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/kalimehtar/32/394_2.png) [@Kalimehtar](https://racket.discourse.group/u/Kalimehtar)\
**Post date:** [August 11, 2023, 12:13pm UTC](https://racket.discourse.group/t/what-locale-is-for-string-upcase/2203/8 "2023-08-11T12:13:38Z")

</div>

```scheme
(displayln (string-downcase "ΧΑΟΣΣ"))
(displayln (string-locale-downcase "ΧΑΟΣΣ"))
(parameterize ([current-locale #f])
  (displayln (string-downcase "ΧΑΟΣΣ"))
  (displayln (string-locale-downcase "ΧΑΟΣΣ")))

```

displays

```scheme
χαοσς
χαοσσ
χαοσς
. . bytes->string/utf-8: byte string is not a well-formed UTF-8 encoding
  byte string: #"\356\247\356\221\356\237\356\274\356\274"

```

---

<div class="post-metadata">

**Author:** ![mflatt](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/mflatt/32/6_2.png) [@mflatt](https://racket.discourse.group/u/mflatt)\
**Post date:** [August 18, 2023, 7:34pm UTC](https://racket.discourse.group/t/what-locale-is-for-string-upcase/2203/9 "2023-08-18T19:34:38Z")

</div>

> [@Kalimehtar](#):
>
> So is it a bug in `string-upcase`?

Yes, the `string-locale-upcase` and `string-locale-downcase` functions were broken for the `#f` locale. I've pushed a repair.
