FIT string output erronesously truncated by number of Cyrillic characters present in the string

For my program, it has several foreign language strings for international users.  I've noticed that at least for certain Cyrillic letters, the FIT output that gets printed to the activity on Garmin Connect (web- and mobile-) ends up getting truncated, by approximately half the quantify of Cyrillic characters present in the string.  I think this must be because the FIT file assumes each string length is equivalent to English length, but some UTF-8 characters are multiple bytes long.

So... does FIT output NOT support UTF-8 characters?

If FIT is supposed to support UTF-8 output, please examine the following erroneous behavior.  Here are some words used in my app, as they've appeared (with errors) in the FIT output on Garmin Connect webpage.

Your Standing  - П   <-- should be ПП but for some reason the output is truncated by 1
Your Results - 4.6 km, 0 КП, 21:2   <--  should end with xx:xx digits, meaning we're missing one numerical digit at the end, meaning this string has been shortened by one character, likely because there are two Cyrillic characters in the string
Course Info - 3.7 km, 5 КП, 41:0 <-- same thing here, missing the last numerical digit in the string
Course Format - ЗН, MGR <-- here we're missing the last English character in the string, likely due to the fact that this string contains 2 Cyrillic characters.
Precision - Норма  <-- here the word should be Нормальная, which is 10 characters long (but occupies 20 bytes unlike a 10 character long ASCII string which would occupy only 10 bytes), therefore, only 10 bytes are printed, which is five Cyrillic characters
Start Date - Пон, 6 Дек  <-- should finish with "Декабрь 2021" again, this string is about 10 characters short, which is because there are about 10 Cyrillic characters present in the string.
Start Time - 6:08:07 (UTC -5)   <-- nothing missing here, because no foreign characters
Any tips?  Is FIT just not UTF-8 compliant?
Or, it is a problem with the both the web and mobile versions of Garmin Connect, responsible for erroneously printing out the FIT info?
  • Strings in FIT files are UTF-8, and reading & writing strings is done by byte count not string length.

    What you might be experiencing is, the device has allocated a fixed byte count for the string, and any characters that go over that byte count are being truncated when the string is written to the file. 20 bytes will give you 20 ASCII characters but will only get you between 5 and 10 multibyte characters. It depends on if the characters are 2, 3, or 4 bytes long.

    Cyrillic characters are 2-bytes each, so if the device has allocated a fixed byte length for the string then you will get half the number of Cyrillic characters as ASCII characters. When 1 byte and 2 byte characters are interspersed the character count may appear random, but the byte count will be the same or within a byte. 

    A device might allocate 20 bytes for one string and 30 bytes for another so you need to compare strings of the same type to reverse engineer the number of bytes that the device has allocated for a specific string. 

    I suggest using the FIT CSV Tool to see what is in the file. 

    developer.garmin.com/.../