They already don't require it, when assigned other strings. It is when assigning LITERALS that require it (or other data sources where encoding info is not known until runtime).
And when string encodings are known, bad things happen too. I have already redesigned the program for windows to use the new compiler. And a lot of bad things happened, because of which we had to look for solutions. If an eight-bit system encoding is installed, then many procedures working with files and directories incorrectly process paths containing characters that are not in the eight-bit encoding. That is, automatically changing data in rows is not always good. And then, in order to access files and directories, it is necessary to change the system encoding many times during the operation of the program.
I have no idea what you are describing. You are going to have to provide an example.
The idea is to make a universal eight-bit CP_FICTITIOUS encoding for strings ansistrings, for which many exceptions will be made in RTL, which will allow even binary data to be stored in strings with CP_FICTITIOUS encoding without unnecessary hassle.
The idea is roughly outlined in the code, but so far it is not enough to avoid the error "Error: unknown code page" during compilation in the test code.
{$CODEPAGE UTF8}
type
string8 = type {RawByteString(1251);}RawByteString(cp_fictitious);
string866 = type RawByteString(866);
var
q5: ansistring;
a5: string8;
x5: string866;
q2:longint;
begin
setmultibyteconversioncodepage(cp_utf8);
q5:='Й';
writeln('stringcodepage(q5)=',stringcodepage(q5),' length(q5)=',length(q5));
a5:=#0#150#190#200#250#255;
writeln('stringcodepage(a5)=',stringcodepage(a5),' length(a5)=',length(a5));
a5:=a5+q5;
writeln('stringcodepage(a5)=',stringcodepage(a5),' length(a5)=',length(a5));
for q2:=1 to length(a5) do write(ord(a5[q2]),' ');
writeln;
x5:=q5;
writeln('stringcodepage(x5)=',stringcodepage(x5),' length(x5)=',length(x5));
for q2:=1 to length(x5) do write(ord(x5[q2]),' ');
writeln;
a5:=a5+x5;
writeln('stringcodepage(a5)=',stringcodepage(a5),' length(a5)=',length(a5));
for q2:=1 to length(a5) do write(ord(a5[q2]),' ');
writeln;
end.
There are patches in the archive, with an approximate description of how it should work. (but so far there are not enough patches to work with) The order of applying patches:
systemh_cp_f.patch
astrings_cp_f_9.patch
astrings_cp_f_14.patch
A large patch is divided into two parts, because before that the "patch" utility worked with it incorrectly.