Java:读取文件时跳过Unicode字符

时间:2019-07-11 08:26:32

标签: java unicode

我正在使用以下代码读取文本文件,

public async Task<PagedList<Product>> GetProductsOfCategory(Guid id, Guid shopId, int pageNumber, int pageSize)
        {
            var category = await _context.GetCollection<Shop>("shops").Find(x => x.Id == shopId && x.CategoryList.Any(y => y.Id == id)).Project(c => c.CategoryList.ElementAt(-1)).SingleOrDefaultAsync();
            return await PagedList<Product>.CreateAsync(category.ProductList, pageNumber, pageSize);
        }

文本文件

enter image description here

如何在读取文件时跳过所有unicode字符?

3 个答案:

答案 0 :(得分:0)

您可以跳过所有包含非ASCII字符的行:

if(Charset.forName("US-ASCII").newEncoder().canEncode(line)){
    continue; 
}

答案 1 :(得分:0)

字符串中的所有字符均为Unicode。字符串是UTF-16代码单元的计数序列。用“ Unicode”表示,您还必须在其他未指定的其他字符集中也不要使用。为了便于讨论,我们假设使用ASCII。

正则表达式有时有时是模式需求的最简单表达:

if (!line.matches("\\p{ASCII}*")) continue;

也就是说,如果字符串不是仅由任何数字组成,包括0,即“ ASCII”字符(即*的意思),则继续。

({String.matches在整个字符串上寻找匹配项,因此实际的正则表达式模式为^\p{ASCII}*$。)

答案 2 :(得分:0)

这样的事情可能会让你前进:

for (char c : line.toCharArray()) {
    if (Character.UnicodeBlock.of(c) == Character.UnicodeBlock.BASIC_LATIN) {
        // do something with this character
    }
}

您可以以此为起点来丢弃每个非基本字符,或者如果整行包含一个非基本字符,则丢弃整行。