2017-03-29 1 views
-1

Wie kann ich einen Unicode in ANSI konvertieren?Unicode zu ANSI

Beispiel habe ich folgende Unicode-Benutzername:

очередной 

und ich nenne dieses Import-Methode:

[DllImport("kernel32.dll", EntryPoint = "GetTempPathA")] 
public static extern uint GetTempPath(uint nBufferLength, [Out()] 
System.Text.StringBuilder lpBuffer); 

ich folgendes Ergebnis erhalten:

C:\Users\A690~1\AppData\Local\Temp\ 

jetzt habe ich versuchte mehrere codierende Sachen wie:

Encoding.ASCII.GetString(Encoding.Unicode.GetBytes(Environment.UserName)); 
Encoding.GetEncoding(1250).GetString(Encoding.Unicode.GetBytes(Environment.UserName)); 
Encoding.GetEncoding(1251).GetString(Encoding.Unicode.GetBytes(Environment.UserName)); 

aber keiner von ihnen gab mir das gleiche Ergebnis wie die Importmethode. Wie kann ich eine Unicode-Zeichenkette richtig in ANSI konvertieren, so dass es mir das gleiche Ergebnis wie die Importmethode gibt?

+0

Ihre Importmethode konvertiert nichts, sie gibt den Pfad zum temporären Verzeichnis Ihrer Benutzer zurück. https://msdn.microsoft.com/en-US/library/windows/desktop/aa364992(v=vs.85).aspx –

+0

Meine Frage war, wie kann ich die Zeichenfolge 'очередной' konvertieren, um 'A690 ~ 1' zu erhalten – user7436839

Antwort

0

Sie sollten die GetTempPathW Methode anstelle der GetTempPathA Methode verwenden. Die W macht es Unicode, was Sie für Ihre Unicode-Zeichen benötigen.

Der Versuch, Unicode in ASCII zu konvertieren (was unmöglich ist, wenn Sie Zeichen aus dem Nicht-ASCII-Bereich verwenden möchten) wird das Problem nicht lösen.

+0

Warum sagen Sie mir, GetTempPathW zu verwenden, wenn meine Frage war, wie kann ich die Zeichenfolge 'очередной' konvertieren, um 'A690 ~ 1' zu erhalten? – user7436839

+0

Sie können nicht. Einfach wie das @ user7436839 –