私のC#プログラムは、ユーザーからのテキスト入力を受け取り、Wikipediaに提案のためのWebリクエストを作成し、Win32 API関数ExtTextOut
関数を使用して提案者をオーナー描画されたListView
に出力します。ベトナム語のExtTextOutを正しくレンダリングする方法
いくつかの提案はこのように、エンコードされ戻ってくる:
Abridged Chronicles of \\u0110\\u1ea1i Vi\\u1ec7t
ので、私はこれを生成するためにSystem.Text.RegularExpressions.Regex.Unescape
を使用してそれらをデコード:そのリテラルベトナム文字で上記の文字列が、
Abridged Chronicles of Đại Việt
をTextBox
、RichTextBox
、およびVisual Studioのデバッガのどこでもうまくレンダリングされますが、正しく描画されませんenはExtTextOut
によって送信されます。ここで
は、それがどのように見えるかです:すべての出力のために
[DllImport("gdi32.dll", EntryPoint = "ExtTextOutW")]
public static extern int ExtTextOut(IntPtr hdc, int x, int y, int options,
ref RECT clip, String str, int len, IntPtr spacings);
が、それだけでレンダリングされたアジア言語の文字:
私はWバージョンを使用するExtTextOut
のための私のDllImport
文を変更しようとしました。
私はWindowsコンピュータで言語オプションを調べましたが、それは問題を解決する適切な場所ではないようです。RichTextBox
は文字をうまく表現できるためです(Visual StudioとWebブラウザでWikipedia、そのことについては)。
私はこのように、文字列を変換しようとした:
byte[] utf8Bytes = Encoding.UTF8.GetBytes(str);
byte[] unicodeBytes = Encoding.Convert(Encoding.UTF8, Encoding.Unicode, utf8Bytes);
str = Encoding.Unicode.GetString(unicodeBytes);
が、それは何もしませんでしたし、私は驚いていないよ、.NET、文字列に(私が間違っているなら、私を修正)ことを考えますメモリ内では常にUTF-16でエンコードされるため、上のコードは実際には何もしませんでした。
ExtTextOut
を使用して文字を正しく表示するにはどうすればよいですか、別の方法が必要ですか?
'ExtTextOut()'使用してのポイントは何ですか? .NETで 'Graphics.DrawString()'や 'TextRenderer'を使って同じことをすることができます。コードがうまくいかない場合は、問題を確実に再現する良い[mcve]を提供する必要があります。 –
このサイトのメンバーは、自分の努力にもかかわらず、時にはより多くの批判に反応することがありますか?私は十分な準備をしていると思ったが、そのページについては知らなかったので、ありがとう。私はその質問を修正し、将来的にそれらを改善するでしょう。関数の選択については、私は何年も前にテキストレンダリングコードを書いていました。私は 'Graphics.DrawString()'と 'TextRenderer'に問題があったと思いますが、私は再訪して見ます。 –