WIN: Umlaute im Account Namen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
icho2099
Beiträge: 37
Registriert: Fr 21. Feb 2020, 19:17
OS, Lazarus, FPC: Win10/64
CPU-Target: 64 Bit
Wohnort: Osterholz-Scharmbeck

WIN: Umlaute im Account Namen

Beitrag von icho2099 »

Hallo,
der Administration ist es "gelungen" Useraccounts im AD anzulegen, deren Name Umlaute enthält.
Bislang war das nicht zulässig, Müller musste als Mueller geschrieben werden.
Nunmehr tauchen Usernamen auf, die Umlaute enthalten.
Die Frage dazu: wenn man den Usernamen aus dem Environment liest, welche Zeichenkodierung hat das dann?

sstvmaster
Beiträge: 581
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 3.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: WIN: Umlaute im Account Namen

Beitrag von sstvmaster »

Command prompt öffnen und chcp eingeben. Dann wird die aktuell verwendete Code Page angezeigt.

Sollte 850 sein.
LG Maik

Windows 10,
- Lazarus 3.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6512
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: WIN: Umlaute im Account Namen

Beitrag von af0815 »

Das mit dem chcp auf der Konsole würde ich nicht unterschreiben. Was du da sicher hast, ist die lokale CP.

Siehe https://learn.microsoft.com/de-de/troub ... in-site-ou
https://www.ibm.com/docs/de/sva/10.0.7? ... tinguished
https://www.gradenegger.eu/de/zeichenko ... tifikaten/

Das hängt davon ab, was der Domänen Administrator da konfiguriert hat.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 253
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: WIN: Umlaute im Account Namen

Beitrag von Jorg3000 »

Hi!
Die Codepage kann man auslesen mittels ...

Code: Alles auswählen

  var OSAnsiCodePage: TSystemCodepage;
  OSAnsiCodePage := Windows.GetACP();  // vgl. Windows.GetConsoleCP()     
GetACP() ergibt bei mir Codepage 1252 (Westeuropäisch).

Aber ich empfehle den Username mit der UTF-16 Funktion GetUserNameW() auszulesen, dann braucht man sich nicht um Codepages zu kümmern ...

Code: Alles auswählen

function getWindowsUsername(): String;
var Size: DWord;
    un: UnicodeString;
begin
  un:='';
  SetLength(un,256);
  Size:=256;
  Windows.GetUserNameW(PWChar(un),{var}Size);  // => Länge in WideChar plus 1 für #0
  if (Size<=1) or (Size>256) then Exit('');

  SetLength(un,Size-1);
  Result:=Utf8Encode(un);
end;
Grüße, Jörg

Soner
Beiträge: 711
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: WIN: Umlaute im Account Namen

Beitrag von Soner »

Vielleicht hat er er den Benutzer erst als Mueller angelegt, dann in Müller umbenannt. Der reale Benutzerordnername bleibt Mueller aber Explorer zeigt überall Müller. So mache ich das immer.
Schaue in C:\Users nach, um zu prüfen ob er auch so gemacht hat.

icho2099
Beiträge: 37
Registriert: Fr 21. Feb 2020, 19:17
OS, Lazarus, FPC: Win10/64
CPU-Target: 64 Bit
Wohnort: Osterholz-Scharmbeck

Re: WIN: Umlaute im Account Namen

Beitrag von icho2099 »

Soner hat geschrieben: Fr 13. Dez 2024, 10:01 Vielleicht hat er er den Benutzer erst als Mueller angelegt, dann in Müller umbenannt. Der reale Benutzerordnername bleibt Mueller aber Explorer zeigt überall Müller. So mache ich das immer.
Schaue in C:\Users nach, um zu prüfen ob er auch so gemacht hat.
Genau so war es.

Socke
Lazarusforum e. V.
Beiträge: 3171
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: WIN: Umlaute im Account Namen

Beitrag von Socke »

icho2099 hat geschrieben: Do 12. Dez 2024, 13:40 Die Frage dazu: wenn man den Usernamen aus dem Environment liest, welche Zeichenkodierung hat das dann?
Wie Jörg schon hingewiesen hat, hat Windows hat eine vollständige UTF-16 API. Damit ist die Kodierung fest vorgegeben.

Wenn du den Usernamen bisher über eine Umgebungsvariable abfragst, kannst du das auch in UTF-16 machen:

Code: Alles auswählen

var UserName: UnicodeString;
begin
  UserName := SysUtils.GetEnvironmentVariable(UnicodeString('USERNAME'))
end;
Der Trick ist hier, die Umgebungsvariable explizit als UnicodeString zu übergeben, sodass per Overloading die Funktion mit UnicodeString als Rückgabetyp aufgerufen wird.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten