The bug report 0024011 was finally resolved as "No change required".
This is what I have understood (after hard thinking and many tests).
The non-breaking space provided with the Format function is a character of ordinal value 160 (hexadecimal A0).
This is non-breaking space in Ansi, but we need it in UTF8 encoding, that is hexadecimal C0 A0, or decimal: 192 160
The original problem seems solved with
ShowMessage(AnsiToUTF8(Format('%10.0n', [1234567.0])));
But the solution does not work if you have national characters and non-breaking spaces. This will display badly:
showMessage(AnsiToUTF8(Format('%10.0n mètres', [1234567.0])));
A correct solution is to only convert the Ansi non-breaking space
showMessage(AnsiReplaceStr(Format('%10.0n mètres', [1234567.0]), #160, #192#160));