2012-02-14 9 views
0

ペルシア語と英語の両方の文字を含むdatagridviewのセルに文字列を印刷しようとしています。指定したセルにこの値を印刷すると、何とかひどくフォーマットされました。ここでDatagridviewペルシャ書式

は絵です:

screenshot

+0

のこのビットを使用し英語に戻る文字を設定することを確認します文化やUTF-8エンコーディング、あるいはその両方を見たいと思うでしょう。 – MethodMan

+0

私にリンクやsthを教えてください。私はすでに私のフォームのこのonLoadを設定しています: InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new System.Globalization.CultureInfo( "fa")); – Ehsan

+0

ここにCodeProjectのDataGridViewプリンタクラスの例があります。http://www.codeproject.com/Articles/13678/The-DataGridViewPrinter-Class – MethodMan

答えて

0

私はペルシャが右から左に読まれると仮定していますか?ヘブライ語の翻訳では、同じ問題がたくさんあります。

RightToLeftプロパティは、両方の言語を使用するコントロールのYesに設定します。

+0

はい私はRTLが答えであることを知っていますが、データグリッドRTLの列を作成するためのオプションが見つかりませんでしたしかし、datagridview RTL全体を作るためのこのオプションがあります... – Ehsan

+0

それはできません。 'RightToLeft'はコントロールにのみ適用され、あなたは全体のためにそれを設定する必要があります。 –

0

stringに格納されているすべての文字列は、実際にはUnicode.Unicodeです。 Read:Strings in .Net and C#The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

編集:変換機能で\ x11を\ u25c0に自動的に変更したいと思っていますが、\ x11はほぼすべてのエンコードで有効です。差異は通常文字\

string reEncodedString = null; 
byte[] unicodeBytes = UnicodeEncoding.Unicode.GetBytes(value); 
byte[] sourceBytes = Encoding.Convert(Encoding.Unicode, 
           sourceEncoding, unicodeBytes); 

あなたがUnicodeにCP850からunicode.orgマッピングで見ることができます:X80、変換機能は、あなたがそれを行う場合でも、それを維持しますので。したがって、この変換が発生するには、これらの文字を手動で変更する必要があります。

また、あなたはペルシア語の文字を使用する場合は、コード

System.Globalization.CultureInfo language = new System.Globalization.CultureInfo("fa-ir"); 
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(language); 

のこのラインを作り、コード

System.Globalization.CultureInfo language = new System.Globalization.CultureInfo("en-us"); 
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(language); 
+0

あなたが言った答えを使用しましたが、私はまだ同じ結果を得ています: string reEncodedString = null; バイト[] unicodeBytes = UnicodeEncoding.Unicode.GetBytes(結果); byte [] sourceBytes = Encoding.Convert(Encoding.Unicode、 Encoding.UTF8、unicodeBytes); //エンコーディングutf16 = Encoding.GetEncoding(1200); //ユニコードエンコーディング message.Operator = Encoding.UTF8.GetString(sourceBytes、0、sourceBytes.Length); – Ehsan