NADRA使用了一个诀窍,实际上是使用一个单词的十六进制值的最后两个字符,例如,如果
\u0622
是 Alif(假设),则 NADRA仅使用最后两个字符进行编码,即
22
,这就是这个技巧。我附上一些代码来将十六进制转换为乌尔都语,读取条形码数据,将其转换为十六进制字符串,然后将此字符串传递给此功能,您将获得所有乌尔都语信息,只需将此字符串放入某些支持乌尔都语或阿拉伯语的视图(Android),组件(Java)或如果您使用C#,则将其放入标签中。
public class ConvertToUrdu {
public static String convertToUrdu(String text)
{
StringBuilder sb = new StringBuilder();
String[] characters = text.split(",");
for(String character : characters)
{
switch (character)
{
case "20":
sb.append(" ");
break;
case "22":
sb.append("\u0622");
break;
case "27":
sb.append("\u0627");
break;
case "13":
sb.append("\u0613");
break;
case "28":
sb.append("\u0628");
break;
case "2B":
sb.append("\u062b");
break;
case "86":
sb.append("\u0686");
break;
case "88":
sb.append("\u0688");
break;
case "2F":
sb.append("\u062f");
break;
case "10":
sb.append("\u0610");
break;
case "39":
sb.append("\u0639");
break;
case "41":
sb.append("\u0641");
break;
case "3A":
sb.append("\u063a");
break;
case "AF":
sb.append("\u06af");
break;
case "2D":
sb.append("\u062d");
break;
case "BE":
sb.append("\u06be");
break;
case "CC":
sb.append("\u06cc");
break;
case "36":
sb.append("\u0636");
break;
case "2C":
sb.append("\u062c");
break;
case "2E":
sb.append("\u062e");
break;
case "43":
sb.append("\u0643");
break;
case "12":
sb.append("\u0612");
break;
case "44":
sb.append("\u0644");
break;
case "45":
sb.append("\u0645");
break;
case "BA":
sb.append("\u06ba");
break;
case "46":
sb.append("\u0646");
break;
case "29":
sb.append("\u0629");
break;
case "A9":
sb.append("\u06a9");
break;
case "C1":
sb.append("\u06c1");
break;
case "7E":
sb.append("\u067e");
break;
case "42":
sb.append("\u0642");
break;
case "91":
sb.append("\u0691");
break;
case "31":
sb.append("\u0631");
break;
case "35":
sb.append("\u0635");
break;
case "33":
sb.append("\u0633");
break;
case "79":
sb.append("\u0679");
break;
case "2A":
sb.append("\u062a");
break;
case "21":
sb.append("\u0621");
break;
case "38":
sb.append("\u0638");
break;
case "37":
sb.append("\u0637");
break;
case "48":
sb.append("\u0648");
break;
case "98":
sb.append("\u0698");
break;
case "34":
sb.append("\u0634");
break;
case "D2":
sb.append("\u06d2");
break;
case "30":
sb.append("\u0630");
break;
case "32":
sb.append("\u0632");
break;
case "60":
sb.append("\u0660");
break;
case "61":
sb.append("\u0661");
break;
case "62":
sb.append("\u0662");
break;
case "63":
sb.append("\u0663");
break;
case "64":
sb.append("\u0664");
break;
case "65":
sb.append("\u0665");
break;
case "66":
sb.append("\u0666");
break;
case "67":
sb.append("\u0667");
break;
case "68":
sb.append("\u0668");
break;
case "69":
sb.append("\u0669");
break;
case "0C":
sb.append(" \u200c");
break;
case "D4":
sb.append("\u06d4");
break;
case "1F":
sb.append("\u061f");
break;
case "02":
sb.append("\u0602");
break;
case "1B":
sb.append("\u061b");
break;
case "7b":
sb.append("\u007b");
break;
case "7D":
sb.append("\u007d");
break;
}
}
return sb.toString();
}
}
我写了这段Java代码,你可以将其转换为任何其他语言。
祝一切顺利:-)
注意:
为了方便起见,在原始字符串中的两个字符后面添加了“,”,例如
A0U1200708091232
->
A0,U1,20,07,08,09,12,32
。只是为了调试,因此此函数实际上将第二个字符串转换为乌尔都语。
编辑:
根据评论,这是我的函数,它将字符串转换为十六进制,我用C#编写了它。
private string convertToHex(string text)
{
StringBuilder sb = new StringBuilder();
foreach (char c in text)
{
if (c == '\n')
{
sb.Append('\n');
sb.Append(',');
}
else
{
sb.Append(String.Format("{0:X}", (int)c));
sb.Append(',');
}
}
return sb.ToString();
}
在JAVA中,您可以通过编写
String hex = String.format("%04x", (int) c);
来进行转换。