<div dir="ltr">Hi,<div class="gmail_extra"><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">><br>
>> If your source code is in UTF8 but you do not tell this to the compiler,</div></blockquote><div> <font color="#500050">...</font></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">> tried that some of the time.  I have never had any problems other than the<br>
> Windows Console issue.<br>
<br>
</div>As mentioned before, that causes the compiler to directly pass your UTF-8 data around with any conversion. That is how Lazarus works (it stores UTF8 data in plain ansistrings) and as long as you only use LCL routines it will work fine, but using such code directly with the OS API (via the FPC RTL or not) will obviously cause problems if that API does not expect data in UTF-8 format.<br>

<div class="im"><br></div></blockquote><div><br></div><div>I pretty much use only UTF8 in most programs, and make exclusive use of UTF8String.  (I only use ANSIString if the string is known to be in a local encoding, such as having been read from an SJIS file) - but I was under the understanding that UTF8String is just an alias to ANSIString for now anyway.  I convert if necessary when using the OS APIs. (The main problem is knowing when it is necessary...)</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">
>>> Detecting the Unicode BOM or not seems to be a strange way to switch the<br>
>>> behavior of the compiler,</div></blockquote><div> <span style="color:rgb(80,0,80)">>>></span></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">> to make the encoding of the file clear, but not so much as a mode switch<br>
> (which is what the Wiki makes it sound like).<br>
<br>
</div>It causes the compiler to interpret the string constants in your program as UTF-8 rather than as unknown binary data, and hence convert them at run time to the current ansi code page when assigning them to an ansistring/shortstring. This is unrelated to mode switches.<br>
</blockquote><div> </div><div>Ooh, this clears up a lot that the Wiki didn't explain very well!  </div><div><br></div><div>So basically saving the file with BOM tells the compiler/RTL to take care of things for you, and saving as UTF8 without BOM is appropriate if you will take care of any conversions yourself.</div>
<div><br></div><div>If UTF8String is just an alias to ANSIString, then I assume it also means that right now the compiler would convert such constants to the local encoding even when assigning to a UTF8String?  (If so, this explains why my finally working console code works only with No BOM).</div>
<div><br></div><div>Also, I assume that the treatment of ResourceString and any other constants is the same?</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">
>> Those programs would be wrong. A user can easily change the console output></div></blockquote><div> >></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">> not even have the fonts for and then complains that the program doesn't<br>
> work.  The answer will be "We only support Japanese systems."<br><br>
</div>Those are business decisions, which are irrelevant to the FPC RTL. Our code is written as much as possible to work correctly under all circumstances.<br>
<span class="HOEnZb"><font color="#888888"><br></font></span></blockquote><div>To be sure, that's an admirable goal! </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="HOEnZb"><font color="#888888">
<br>
Jonas</font></span></blockquote><div> </div><div><span style="color:rgb(80,0,80)">Thanks for your comments,</span></div><div><span style="color:rgb(80,0,80)">    Noah Silva</span></div><div> </div></div></div></div>