Skip to content

Extended (Non-ASCII) Characters Showing Incorrectly in Centova Cast: How to Fix the UTF-8 Encoding

Updated 5 min read

Updated: 8 October 2026 · Applies to: Centova Cast v3 (current release 3.3.4), language files according to Centova; encoding checks tested with file 5.46, iconv (glibc 2.41), gettext 0.23 and MariaDB 11.8 on Debian 13

Centova Cast works only in UTF-8 internally, so a language file must be saved as UTF-8 for accented and non-Latin letters to display correctly. If you see ö instead of ö, wrong letters or question marks after editing a translation, the .po file was most likely saved in another encoding, often the Windows "ANSI" code page. Re-save it as UTF-8 without a byte order mark (BOM), or convert it on the server with iconv, then run updatelanguages and restart Centova Cast.

What the symptoms tell you

  • GesamtgröÃe instead of Gesamtgröße: UTF-8 text was read as Latin-1 and saved again, so each special letter turned into two characters. This is also what you get if you convert a file that was already UTF-8 a second time, so check the encoding before converting.
  • Completely wrong letters, such as Ïàðîëü instead of Пароль: the file was converted from the wrong code page (here a Windows-1251 Cyrillic file treated as Windows-1252).
  • Question marks, such as ??????: the characters were replaced when the text passed through an encoding that cannot hold them (for example a latin1 database column, see the last section). Converting will not bring them back; type them again.
  • A replacement character (�): single 8-bit bytes reached a page that expects UTF-8.

Fix a language file on the server

These steps need root access to the Centova Cast server over SSH. Replace de_DE with your locale folder.

  1. Go to the locale folder and check the encoding of the files:
    cd /usr/local/centovacast/system/i18n/locale/de_DE
    file -i common.po
    common.po: text/x-po; charset=iso-8859-1
    A correct file shows charset=utf-8. Note that file reported both our Windows-1252 and our Windows-1251 test files as iso-8859-1: it cannot tell these code pages apart, so you need to know which language or editor the file came from.
  2. Confirm it is not valid UTF-8. A valid file gives no output; ours failed:
    iconv -f UTF-8 -t UTF-8 common.po > /dev/null
    iconv: illegal input sequence at position 635
  3. Keep the original and convert it. Use WINDOWS-1252 for Western European languages, WINDOWS-1251 for Cyrillic and WINDOWS-1250 for Central European languages (iconv -l lists every name):
    cp common.po common.po.orig
    iconv -f WINDOWS-1252 -t UTF-8 common.po.orig -o common.po
    file -i common.po
    common.po: text/x-po; charset=utf-8
    grep Gesamt common.po
    msgstr "Gesamtgröße: %s MB"
    If the letters are still wrong, copy common.po.orig back and try another source encoding.
  4. Remove a BOM if there is one. Centova recommends UTF-8 without a BOM, and the gettext tools reject it too:
    file common.po
    common.po: GNU gettext message catalogue, Unicode text, UTF-8 (with BOM) text
    msgfmt -c -o /dev/null common.po
    common.po:1:2: syntax error
    msgfmt: found 1 fatal error
    sed -i '1s/^\xEF\xBB\xBF//' common.po
    file common.po
    common.po: GNU gettext message catalogue, Unicode text, UTF-8 text
  5. Check the whole file. With the gettext tools installed (apt install gettext or dnf install gettext), msgfmt -c -o /dev/null common.po prints nothing for a good file. A file that is still not UTF-8 gives invalid multibyte sequence errors. Also check that the header still says "Content-Type: text/plain; charset=UTF-8\n", as in Centova's templates.
  6. Repeat for the other .po files you edited (user.po, external.po and so on), then rebuild the language database and restart:
    /usr/local/centovacast/sbin/updatelanguages
    /usr/local/centovacast/centovacast restart

For more iconv examples, including converting many files at once, see how to convert files to UTF-8 encoding in Linux.

Editing translations on your computer

  • Poedit is what Centova recommends. According to Centova, it keeps special characters correct automatically.
  • Notepad++: before saving, choose Encoding > Convert to UTF-8 (not the BOM variant).
  • Change only the msgstr lines and keep placeholders such as %s exactly as they are. msgfmt does not catch a missing placeholder in Centova's files (our test file without %s passed), so check them by eye.

If the new text does not appear at all, see why language changes do not show up in Centova Cast. The full translation procedure is in Centova Cast v3 localization.

If the wrong characters are in song titles

Language files only cover the interface text. When artist or track names look wrong, check the tags in the audio files first. After fixing tags, use Options > Purge and update library in the media library: according to Centova, a normal library update skips files it has already indexed.

Also check that the database can store the characters. Read the database name from DB_NAME in /usr/local/centovacast/etc/centovacast.conf, then run (read-only):

mysql -u root -p -e "SELECT table_name, table_collation FROM information_schema.TABLES WHERE table_schema='YOUR_DB_NAME';"

Collations starting with utf8mb4 store any language. A latin1 table cannot hold Cyrillic, Greek or Asian scripts. In our MariaDB 11.8 test, inserting Пароль into a latin1 column failed in the default strict mode:

ERROR 1366 (22007) at line 1: Incorrect string value: '\xD0\x9F\xD0\xB0\xD1\x80...' for column `radio_test`.`tracks_latin1`.`title` at row 1

With strict mode off, the row was saved as ?????? and the original text was lost. Do not convert Centova's tables yourself: back up first (see backing up Centova Cast accounts) and ask Centova support or your provider.

Official documentation: Centova Cast v3 localization.

Related services

Shoutcast and Icecast hosting

radio streams with AutoDJ, from $3 a month.

Centova Cast dedicated servers

Centova licence included, from $45 a month.

Start an online radio station

Shoutcast or Icecast with AutoDJ, and streaming experts on call.

Was this answer helpful?

Still stuck? Open a ticket