2009-04-27 6 views
1

日本のローカライズ版サイトを開発中です。そのサイトでは、asp:labelとそのようなコントロールを使用していくつかの動的フィールドを表示します。asp.netのダブルバイト番号

最近、「ダブルバイト文字」を使用して数値を表示する必要がありました。

それは最初に私はそれがクライアントからの混乱だと思った、彼は電子メールで私にこれを送っている間:

1234567890 
1234567890 

、これは私が間違っていた、そして実際に利用できる「広い」の数文字があることを示しています。

ASP.NETを動的に切り替える方法に関するヒントはありますか?

更新:2番目のサンプルは「フルサイズ」と呼ばれるようです。質問は次のように言い換えることができます:

現在のカルチャがJPの場合、ASP.NETが自動的にFULLWIDTHの数値を表示させるようにしますか?

答えて

2

明らかに、ユニコードには「通常」の数字と同じように見える他の文字がありますが、デフォルトではより広い文字が表示されています。

ここではUnicodeとして保存されてメモ帳に貼り付け、あなたの質問からテキストは、だ、とXXDを介して実行:それは「1」0x0031ここでのように見える

0000000: fffe 3100 3200 3300 3400 3500 3600 3700 ..1.2.3.4.5.6.7. 
0000010: 3800 3900 3000 0d00 0a00 11ff 12ff 13ff 8.9.0........... 
0000020: 14ff 15ff 16ff 17ff 18ff 19ff 10ff 0d00 ................ 
0000030: 0a00 0a         ... 

、「特別な1」は0xff11です。 CSSを使用して「通常の」数字を表示しているが幅の広いフォントはオプションではない場合は、数字を入力して文字列に変換し、0x0010と0x0039の間のすべての文字に0xff10を追加する必要がありますあなたが探しているものを得るために。ここで

+0

はい、これは正しいです。文字は、UnicodeのドキュメントでFULLWIDTHと呼ばれています(少なくとも私が見つけることができるものです)。任意のアイデアをどのように自動的にASPに変換する:ラベルには? – pgb

+0

ControlAdapterは、これを処理するためのサブクラス化ラベルがno-go(別の回答に対するあなたのコメントで判断)であると推測しているので、この作業を行う最もクリーンな方法かもしれません。 –

+0

ControlAdapterは移動方法と同じですが、ASP.NET 1.1を使用しています(現時点では移行できません) – pgb

0

あなたはフォント幅をDBCSと混同しています。幅の広いフォントが必要な場合は、適切なCSSを使用してください。実際にユニコードをサポートし、ワイド文字を使用する場合は、適切なデータ型を使用してバックエンドを実装する必要があります。

デフォルトでは、C#のすべての文字列はUnicodeです。 hereで説明されているテクニックに従ってエンコードを制御できます。

+0

私が最初にそれらを混同しました。しかし、私が投稿した例とジョナサンの答えは下記をご覧ください。 – pgb

0

はそれを行うための機能である: -

static string IntToWideNumbers(int n) 
    { 
     char[] chars = n.ToString().ToCharArray(); 
     for (int i = 0; i < chars.Length; i++) 
     { 
      chars[i] = (char)((uint)chars[i]^0xFF20); 
     } 
     return new String(chars); 
    } 
+0

私はこれを行うための自動方法を検討しています。私のサイトは異なる動的コンテンツを表示する異なるasp:ラベルでいっぱいです。いくつかはテキストといくつかの数字(主に価格情報と日付)を含んでいます。私は、他のバージョンに影響を与えることなく、日本語版のどこのラベルを翻訳するだけでよいですか。 このコードを実行して現在のカルチャを確認できますが、実際はもっと自動化されたソリューションを検討しています。 – pgb

+0

それは、あなたが「自動的に」行うことができる何かになるためには、あまりにも遠いという要件です。 – AnthonyWJones

関連する問題