Page 1 sur 1

[R]xEFxBFxBF#Region

Posté : mer. 05 août 2020 16:45
par GMH
Bonjour,

Lorsque j'ouvre un code dans SciTE, les lettres xEFxBFxBF s'affichent en tête de la ligne #Region.

Savez-vous ce que cela signifie et comment l'éviter ?

Je vous remercie.

Re: [..]xEFxBFxBF#Region

Posté : mer. 05 août 2020 21:56
par walkson
Bonjour,
Peut être un début de solution https://www.autoitscript.com/forum/topi ... -ef-bf-bf/
D'où ma question: avez vous la dernière version de SciTe ?
https://www.autoitscript.com/site/autoit-script-editor/

Re: [..]xEFxBFxBF#Region

Posté : jeu. 06 août 2020 09:16
par GMH
Bonjour et merci pour votre réponse,

Le message du forum que vous me proposez expose bien le même problème. Mon programme, comprenant des caractères non latins, est encodé en UTF-16 Little Endian,

La version de mon SciTE est 4.1.2 du 13 février 2019.

Re: [..]xEFxBFxBF#Region

Posté : ven. 07 août 2020 00:52
par jchd
Choisir plutôt UTF8 pour l'encodage des sources et l'affichage console avec une police lisible et assez complète (e.g. DejaVu Sans Mono). Ensuite remplacer vos ConsoleWrite() par CW() et voilà. Notez que ce CW() ajoute un @LF.

Code : Tout sélectionner

Local $s

; Mixed language strings
$s = "Μεγάλο πρόβλημα  Большая проблема  大问题  बड़ी समस्या  مشكلة كبيرة"
CW($s)

; A familly with different Fitzpatrick settings = only one glyph
$s = ChrW(0xD83D) & ChrW(0xDC68) & ChrW(0xD83C ) & ChrW(0xDFFB) & ChrW(0x200D) & ChrW(0xD83D) & ChrW(0xDC69) & ChrW(0xD83C) & ChrW(0xDFFF) & ChrW(0x200D) & ChrW(0xD83D) & ChrW(0xDC66) & ChrW(0xD83C) & ChrW(0xDFFD)
CW($s)

; Transport emojis
$s = ""
For $i = 0xDE80 To 0xDEFF
	$s &= ChrW(0xD83D) & ChrW($i)		; U+1F680 to U+1F6FF
	If Mod($i, 16) = 15 Then
		CW($s)
		$s = ""
	EndIf
Next

; --------------------

Func CW($s = "")
	Return (@Compiled ? _CUI_ConsoleWrite : _ConsoleWrite)($s)
EndFunc   ;==>CW

Func _CUI_ConsoleWrite(ByRef $s)
	Local Static $hCon = _CUI_ConsoleInit()
	DllCall("kernel32.dll", "bool", "WriteConsoleW", "handle", $hCon, "wstr", $s & @LF, "dword", StringLen($s) + 1, "dword*", 0, "ptr", 0)
	Return
EndFunc   ;==>_CUI_ConsoleWrite

Func _CUI_ConsoleInit()
	DllCall("kernel32.dll", "bool", "AllocConsole")
	DllCall("kernel32.dll", "bool", "SetConsoleOutputCP", "int", 65001)	; console to UTF8
	Return DllCall("kernel32.dll", "handle", "GetStdHandle", "int", -11)[0]
EndFunc   ;==>_CUI_ConsoleInit

; Unicode-aware ConsoleWrite
Func _ConsoleWrite($s)
	ConsoleWrite(BinaryToString(StringToBinary($s & @LF, 4), 1))
EndFunc   ;==>_ConsoleWrite
On peut préciser une police ad-hoc pour la console CUI (encore une fois je recommande DejaVu Sans Mono).

Re: [..]xEFxBFxBF#Region

Posté : ven. 07 août 2020 10:49
par GMH
Bonjour, et merci pour la solution : L'encodage UTF8 résout le problème : plus de caractères gênants en début de code.
J'ai tenté de changer la police dans les Options de SciTE, mais la sauvegarde du fichier d'options ne se fait pas si on ne change pas son nom. Comment s'y prend-on ?

Re: [..]xEFxBFxBF#Region

Posté : ven. 07 août 2020 11:52
par jchd
Dans C:\Users\XXXXXX\AppData\Local\AutoIt v3\SciTESciTEUser.properties, j'ai ça :

font.monospace=font:DejaVu Sans Mono,size:11
code.page=65001
output.code.page=65001
NewFileEncoding=UTF8
utf8.auto.check=4

Re: [R]xEFxBFxBF#Region

Posté : ven. 07 août 2020 14:46
par GMH
C'est impeccable. Grand merci pour tout ce que j'apprends.