Chào các bạn! Mình đang code 1 ứng dụng chuyển mã font VNI sang unicode, Thuật toán là duyệt dòng chữ tiếng Việt, rồi thay thế các ký tự trong bảng mã VNI bằng các ký tự trong bảng mã Unicode tương ứng. Đến chỗ thay thế text thì bị lỗi (txt = txt.Replace(txt.Substring(i, 2), c2);
Chuỗi đầu vào là 1 dòng chữ tiếng Việt
Chạy thử lỗi như sau:
Command: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ArgumentOutOfRangeException: Index and length must refer to a location within the string.
Parameter name: length
at System.String.Substring(Int32 startIndex, Int32 length)
at CANHQUYVD11.ConcerterVNItoUnicode.ConvertVNIWindows(String txt)
at CANHQUYVD11.ChangeFontCode.ChuyenMaText()
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at CadAddinManager.Command.AddinManagerBase.Invoke(MethodInfo methodInfo)
- Các bạn xem giúp đoạn code dưới và cho mình ý kiến với, cảm ơn nhiều!
public class ConcerterVNItoUnicode
{
public string ConvertVNIWindows(string txt)
{
int idx;
string c="";
string c2="";
var _VniWindows2 = new List<string> {
"aâ", "AÂ", "aê", "AÊ", "eâ", "EÂ", "ô",
// Xóa bớt cho gọn
};
var _VniWindows1 = new List<string> {
"ñ", "Ñ", "í", "Í",
"ì", "Ì", "æ", "Æ",
"ö", "Ö", "î", "Î"
};
var _Unicode2 = new List<string> {
"â", "Â",
"ă", "Ă", "ê", "Ê", "ơ", "Ơ",
};
var _Unicode1 = new List<string> {
"đ", "Đ", "í", "Í", "ì", "Ì", "ỉ", "Ỉ",
"ư", "Ư", "ỵ", "Ỵ"
};
int daiText = txt.Length;
for(i = 0; i < daiText-1; i++)
{
c = txt.Substring(i, 2);
if (_VniWindows2.Contains(c))
{
idx = _VniWindows2.IndexOf(c);
if (idx >= 0)
{
c2 = _Unicode2[idx];
}
txt = txt.Replace(txt.Substring(i, 2), c2); //-----------LỖI CHỖ NÀY --------LỖI CHỖ NÀY--------LỖI CHỖ NÀY
}
}
return txt;
}
}