最近的文字识别项目需要获取图片中一个汉字的宽度,这样以便于对文字中的空格进行排版。当前通过OCR文字识别获取到了每个字的x、y坐标数据,那么一个字的宽度便等于后一个汉字的x减去前一个汉字的x。但问题又来了,数字123与字母abc的宽度肯定小于一个汉字的宽度,那么便需要判断相邻的两个字符是否为汉字了。
- 查看汉字的Unicode编码范围:https://unicode-table.com/cn/blocks/cjk-unified-ideographs/
public class NewBehaviourScript : MonoBehaviour {
private string str = "[问题12]:相邻的都是汉字吗?";
void Start()
{
//IsChineseCharacterMethod1(str);
IsChineseCharacterMethod2(str);
}
/// <summary>
/// 通过ASCII码判断,汉字的ASCII码大于127
/// </summary>
/// <param name="str"></param>
private void IsChineseCharacterMethod1(string str)
{
for (int i = 1; i < str.Length; i++)
{
if(str[i-1]>127&&str[i]>127)
{
Debug.Log("\""+str[i - 1] + "\"与\"" + str[i] + "\"相邻,都是汉字");
}
else
{
Debug.Log("\"" + str[i - 1] + "\"与\"" + str[i] + "\"相邻,但不都是汉字");
}
}
}
/// <summary>
/// 通过UNICODE 编码范围判断
/// </summary>
/// <param name="str"></param>
private void IsChineseCharacterMethod2(string str)
{
for (int i = 1; i < str.Length; i++)
{
if (str[i - 1] >= 0x4e00&& str[i - 1]<= 0x9fff && str[i] >=0x4e00&& str[i] <= 0x9fff)
{
Debug.Log("\"" + str[i - 1] + "\"与\"" + str[i] + "\"相邻,都是汉字");
}
else
{
Debug.Log("\"" + str[i - 1] + "\"与\"" + str[i] + "\"相邻,但不都是汉字");
}
}
}
// Update is called once per frame
void Update () {
}
}
运行结果如下: