2017-08-06 13 views
3

こんにちは私は、ユーザーがデータを保存し、タミルフォントでデータを見ることができるWindowsアプリケーションを開発しました。私は 'Bamini'フォント(Tamilフォント)をインストールし、テキストボックスとdatagridviewをBaminiフォントに設定しました。私はタミル語でデータを保存して取り出すことができます。 「; j_ahを、電子」MySQLのDBに(私は設定されている、それは次のように保存されて、私が入力した場合は、「இந்தியா」テキストボックスにし、保存:C#:MYSQLデータベースからユニコード文字としてデータを印刷できません

問題は、私が入力したタミルデータを符号化して、たとえばデータベース に保存されています列の文字セットはutf8)。 これでデータを取得して印刷しようとすると、「இந்தியா」の代わりに「、e; j_ah」と表示されます。

誰でも私がここで間違っていることを教えてもらえますか?私は、文字列を挿入するために使用しています

コード:

textBox1テキストボックスの値として影響を受けた 'இந்தியா'(テキストボックスのフォントが 'Bamini' タミル語フォントに設定されているので)である

 string insertdata = "INSERT INTO tamil (country) VALUES (@cnt)"; 
    MySqlCommand cmd = new MySqlCommand(insertdata,connection); 
    connection.Open(); 
    cmd.Parameters.AddWithValue("@cnt",textBox1.Text); 
    cmd.ExecuteNonQuery(); 
    connection.Close(); 

データベース次の:

 tablename: Tamil 
     Sno Country 
     1  ,e;j_ah 

表STRU cture:

  CREATE TABLE `tamil` (        
      `sno` int(11) auto_increment NOT NULL,       
      `Description` varchar(50) NOT NULL,       
      `Country` varchar(50) character set utf8 NOT NULL,       
      KEY `id_sno` (`sno)        
     ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; 
+0

デバッグして、テキストボックスから取得している文字列に正しいデータがあることを確認しましたか?私は、文字列内の各文字のUTF-16値をログに記録することをお勧めします。たとえば、 'foreach(char c in text){Console.WriteLine(((ushort)c).ToString(" x4 ")); } ' –

+0

次に、データをデータベースに保存するために使用しているコードを表示してください。 –

+0

Unicode文字として使用する前に、おそらくDB列のバイトストリームをUTF-8デコードする必要があります。 – SBS

答えて

1

試験の長いリストの後、私は最終的に私のプリンタでタミル文字を印刷するための代替ソリューションを見つけました。 注:ハードウェアテクニカルサポートは、多くのサーマルプリンタでは生のプリンタヘルパークラスを介して送信されるタミル文字を受け付けないことを伝えました。

私はcrsytalレポートを設計し、すぐに成功した印刷を試みました。 (私のプリンタは、3インチサーマルプリンタである)、接続文字列では、このようなものに入れ

0

何かが文字列のUTF-8エンコーディングでうまくいきません。 "、e; j_ah"はあなたの文字列のUTF-8表現ではありません。 DBのUTF-8機能をバイパスし、可変長のプレーンバイト配列を格納する "Country"列に単純なBLOB型を使用することをお勧めします。その後、.NETのUTF-8コーデックを使用し、エンコード/デコードして、エンコードされたバイト配列をBLOB列に格納します。

そうに "国" の宣言を変更:あなたのタミル語の文字列をデコード/エンコードするために)

`Country` BLOB NOT NULL, 

利用Encoding.UTF8.GetBytes()とEncoding.UTF8.GetString(。

+0

私は試しました。動作しません。 – Aesha

+0

AddWithValue()の呼び出しでtextBox1.TextをEncoding.UTF8.GetBytes(textBox1.Text)に置き換えましたか?はいの場合、それが機能しない場合は、パラメータコレクションの型固有の「追加」メソッドを試してみてください。例えばパラメータ名とSqlDbTypeを持つAdd()メソッド。 – SBS

+0

はい私はしました。他のオプションを試す – Aesha

2

誰でも私がここで間違っていることを教えてもらえますか?

視覚的にエンコードされたフォントを使用しています。この方式で

、あなたはキーボード上のコンマキーを押すと、通常の文字U + 002C COMMA ,を入力します。テキストフィールドはカンマの形がタミール文字Iのように見えるフォントで設定されますが、実際はカンマです。

コンマがデータベースに格納され、検索ツールはコンマで一致します。それをデータベースから取り出してBaminiフォントで表示すると、タミル文字Iのように見えますが、データベースを調べるために使用しているような標準フォントで表示すると、コンマのように。

視覚的にエンコードされたフォントは、我々は、標準のエンコーディングを持っていなかった言語のスクリプトに対処するために使用方法ですが、彼らはビンで、今日-チャックBaminiを使用すべきではありません。

最新のオペレーティングシステムは、ネイティブのタミル語のキーボードとフォントを出荷しています(Windows、Nirmala UIなど)。このアプローチを使用すると、ユーザーは通常のテキストフィールド(特別なフォントセットを持たない)に入力して、実際のUnicode文字U + 0B87を取得し、データベース内でまったく同じに見え、意味論的に適切に動作するはずです。

0

は基本的には、Baminiは、Unicode標準ではありません。それはそれ自身のエンコーディングを持っていますので、あなたがそれを解読する必要があるときはいつでも、コンテンツにbaminiフォントを設定する必要があります。システムを印刷しようとすると、baminiフォントに設定されません。

解決策は、印刷中にbaminiではなくunicodeフォントを使用するか、baminiフォントを設定する必要があります。

関連する問題