2

GetUserNamewin32 API から返される文字列に使用されるエンコーディングを取得するにはどうすればよいですか? 私は pywin32 を使用していますが、8 ビットの文字列を返します。私のドイツ語 XP では、この文字列は明らかに Latin-1 を使用してエンコードされていますが、これは他の Windows インストールでは当てはまらない場合があります。

を使用することもできますGetUserNameWが、ctypes を使用して自分でラップする必要があります。より簡単な解決策があれば、今のところは避けたいと思います。

4

4 に答える 4

5

GetACPを呼び出して、非 Unicode API が使用する現在の ANSI コードページを見つけることができます。MultiByteToWideCharを使用して、コードページとしてゼロを渡すこともできます(CP_ACP は Windows ヘッダーでゼロとして定義されています)。コードページ文字列を Unicode に変換します。

于 2009-03-21T19:09:41.547 に答える
5

これがあなたの質問に直接答えているわけではないことは承知していますが、あなたが言及したように、Unicode クリーンを使用するという問題を経験することを強くお勧めしますGetUserNameW

非ワイド コマンドは、Windows のエディションによって動作が異なります (たとえば、ME。ただし、例が古いことは認めます!)。

多くの多言語 Windows 開発を行ってきましたが、幅広い API は翻訳またはラッピングのレイヤーを追加できますが (お勧めします!)、それだけの価値があります。

于 2009-03-21T19:09:53.607 に答える
3

さて、これが私が今使っているものです:

>>> import win32api
>>> u = unicode(win32api.GetUserName(), "mbcs")
>>> type(u)
<type 'unicode'>

mbcsは、 Windowsの特別な標準エンコーディングです。

Windows のみ: ANSI コードページ (CP_ACP) に従ってオペランドをエンコードします。

于 2009-03-22T13:05:37.203 に答える
0

API ドキュメントから、GetUserNameA は ANSI で名前を返し、GetUserNameW は Unicode で名前を返します。GetUserNameW を使用する必要があります。

于 2009-03-21T19:09:16.697 に答える