2011-07-07 10 views
6

私は、フォルダのディレクトリ一覧を作成し、ファイル名を取得するVB6アプリケーションを持っています。これらの中にはアクセント記号が付いているものもあります(例: "Guimarães.txt"(小文字のA、チルダ)。 VB Dir関数とFileSystemObject関数の両方でアクセント付き文字を認識できず、その代わりにファイル名を "Guimar?es.pdf"として返すので、その後ファイルを開くことができません。 Windowsエクスプローラでファイルを正しく見ることができますVB6でアクセント付きのファイル名を読む

これは、Windows Server 2003 R2を実行している1つのライブ環境でのみ発生します。私たちのテストシステムでは、Windows 2008とWindows 7が主なものですが、ファイルを正しく読み取ることができます。私は当初はFSOのバージョンになっていると思っていましたが、 "Dir"は同じ結果を示しています。また、ファイルの名前をログファイルに書き込むときにも間違っています。だから私は非常に早い段階でキャラクターを扱うことができず、それを疑問符で置き換えると思います。

私が設定する必要があるのは問題の原因です:Windows版、地域設定(私のアカウントがロックされているため表示できません)、そして私ができること問題を解決する。今のところ、これらの文字を使用しないようにユーザーに依頼しましたが、これは長期的な解決策ではありません。

ありがとうございました。

+2

私は問題がVB6とそのUnicodeのサポートの欠如に関係していると思われます。 –

+4

地域設定で「Unicode以外のプログラムの言語」をポルトガル語に設定し、問題が解決するかどうか確認してください。私はそれがすべきだと思う。残念ながら、私は古いMS VBランタイムがUnicodeをサポートしているのか疑問に思っています。 –

+0

基本的な原因は、実際にはVB6が10000の異なる文字をエンコードするために1バイトのみを使用しようとしていることです。一部の文字は失われます。言語を変更するだけで、どの文字が失われるかが変わります。しかし、?これはU + 00E3です(ISO-8859-1/CP1252)。これははるかに一般的です。 – MSalters

答えて

2

[OK]をクリックすると、ディスクから読み取られるファイル名はユニコードを使用します。 これを表示しようとすると、使用しているフォントがそのグリフをサポートしていないので、 "?"が表示されますが、ディスクに書き込むと正しい表現が書き込まれます。 これがファイル関数に渡されると、それはMBCSまたは別の文字セットに「変換」されて、それからブレイクします。

ネイティブワイドWin32 API呼び出しを使用するようにコードを変更することも、ファイル名で使用されている言語と一致するように「Unicode以外のプログラムの言語」を変更することもできます。

+0

ありがとうございます。上記のように、私はそれが中国がデフォルトであるためだと信じています。ただし、「Unicode以外のプログラムの言語」はVB6に当てはまりますか?私はそのユニコード機能がやや曖昧であると頼みます。 – olippold

+1

VB6自体はユニコードですが、悲しいことですが、悲しいことですが、外部とのやりとりのほとんどは、ユニコードからマルチバイト文字に変換するインターフェイス(「非ユニコードアプリケーション」が出現する場所です) – Deanna

関連する問題