2017-03-29 26 views
-1

どのようにしてユニコードをANSIに変換できますか?ユニコードからANSI

例Iは、以下のユニコードのユーザー名があります。

очередной 

を、私はこのインポートメソッドを呼び出す:私はきた今

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

:私は次の結果を受け取り

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

を次のような複数のエンコーディングを試しました:

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)); 

しかし、それらのどれもインポートメソッドと同じ結果を得ていませんでした。ユニコード文字列をANSIに正しく変換することで、インポートメソッドと同じ結果が得られますか?

+0

インポートメソッドで何も変換されない場合は、ユーザーの一時ディレクトリへのパスが返されます。 https://msdn.microsoft.com/en-US/library/windows/desktop/aa364992(v=vs.85).aspx –

+0

私の質問はどのように文字列 'очередной'を 'A690〜1' – user7436839

答えて

0

GetTempPathAメソッドの代わりにGetTempPathWメソッドを使用する必要があります。 WはUnicodeになります。これはUnicode文字に必要なものです。

UnicodeをASCIIに変換しようとすると(非ASCII範囲の文字を使用することはできません)、問題は解決しません。

+0

なぜあなたは私の質問が 'A690〜1'を受け取るために文字列 'очередной'を変換することができたときにGetTempPathWを使用するように教えていますか? – user7436839

+0

できません。シンプルな@ user7436839 –

関連する問題