C#Arabic to English Code给我错误

时间:2012-01-08 06:51:02

标签: asp.net c#-3.0

有人可以帮助我纠正这个错误我已经使用VS2010 ASP.Net C#3.0我发现这可以在网上,但它没有工作,因为它给我的错误显示在屏幕截图中。我无法理解错误消息

来自http://weblogs.asp.net/abdullaabdelhaq/archive/2009/06/27/displaying-arabic-number.aspx

的代码参考

代码:

 protected void Button1_Click(object sender, System.EventArgs e)
    {   //Call Function
        this.Label1.Text = "Arabic Number : <b>" + TranslateNumerals(this.TextBox1.Text) + "</b>";
    }


    public static string TranslateNumerals(string sIn)
    {
        System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
        System.Text.Decoder utf8Decoder = null;
        utf8Decoder = enc.GetDecoder();
        dynamic sTranslated = new System.Text.StringBuilder();
        char[] cTransChar = new char[2];
        byte[] bytes = {217,160 };
        // Start Converting characters into Arabic mode.

        char[] aChars = sIn.ToCharArray();
        foreach (char c in aChars)
        {
            if (char.IsDigit(c))
            {
                bytes[1] = 160 + Convert.ToInt32(char.GetNumericValue(c));
                utf8Decoder.GetChars(bytes, 0, 2, cTransChar, 0);
                sTranslated.Append(cTransChar[0]);
            }
            else
            {
                sTranslated.Append(c);
            }
        }
        return sTranslated.ToString();
    }

enter image description here

2 个答案:

答案 0 :(得分:0)

您可以在160前添加(byte)之类的演员。

我有点困惑为什么需要这么大的功能。

更新回答: 鉴于只有10个可能的数字可以转换,你可以做这样的事情,使其更具可读性。我想,无论如何,我通常不会在c#中编码,而且我现在正在使用Mac ...随意打击我的代码。

public static string TranslateNumerals(string sIn)
{
  var sb = new System.Text.StringBuilder();
  char[] arabic = { '٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'};
  foreach (char c in sIn) {
    int idx;
    // if it wasn't a number, just append it, otherwise convert it
    if(!Integer.tryParse("" + c, idx)) {
      sb.Append(c);
    } else {
      sb.Append(arabic[idx]);
    }
  }
  return sb.toString();
}

// backwards array (which appears frontwards here)
{ '٩','٨','٧','٦','٥','٤','٣', '٢', '١', '٠'};

答案 1 :(得分:0)

编译器抱怨您将整数加法(160 + Convert.ToInt32...)的结果隐式转换为字节的请求。这是一个缩小的转换;整数具有比字节更宽的范围,并且编译器希望您使用显式强制转换运算符确认您知道这可能会产生运行时错误。

假设添加160实际上对某个角色有用,我建议使用类似的东西。

if (c >= '0' && c <= '9')
{
    bytes[i] = (byte)((int)c + 160);
}

...作为数组bytes的第i个值,将正确生成一个值大于char c的字节,如果{{1表示0到9之间的ASCII数字。

不要使用函数c,即使char.IsDigit是ASCII数字范围之外的数字,它也会返回true。我没有遇到这么多,但由于你明确地编写多语言代码,你将需要处理这种情况。

我没有回顾你链接到的其他帖子,但鉴于这两个非常明显的错误,坦率地说,我不会对其余部分的正确性抱有太多信心。