使用SimpleDateFormat解析CSV日期抛ParseException,但日期格式看似正常
问题分析与解决方案
从你给出的异常信息com.codename1.l10n.ParseException: Unparseable string 2010鈥�2鈥�8可以看出,核心问题是CSV文件的字符编码与CSVParser解析时使用的编码不匹配,导致原本日期里的-(短横线)被解析成了乱码字符鈥�,最终让SimpleDateFormat无法识别这个格式错误的日期字符串。
解决步骤:
第一步:确认CSV文件的实际编码
你可以用文本编辑器(比如Notepad++)打开CSV文件,查看它的编码格式(常见的有UTF-8、UTF-8 with BOM、GBK、ISO-8859-1等)。第二步:指定
CSVParser使用正确的编码解析CSVParser默认可能使用了系统默认编码或者某个固定编码,你需要调用它的重载构造方法,传入指定编码的Reader来解析文件。比如如果你的CSV是UTF-8编码,代码可以改成这样:// 假设inputStream是你的CSV文件输入流 InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8"); CSVParser parser = new CSVParser(reader); // 后续解析逻辑不变如果是Codename One特有的编码常量,也可以用
com.codename1.io.Util里的编码定义,比如Util.UTF8。临时补救方案(不推荐作为长期解决办法)
如果暂时无法确认编码,也可以先对解析出的日期字符串做清理,替换掉乱码字符再解析:String dateStr = data[i][0].replaceAll("[^0-9]", "-"); // 保留数字,其他替换成短横线 // 再做去重处理,比如把多个连续的-换成单个 dateStr = dateStr.replaceAll("-+", "-"); Date tmpData = sdf2.parse(dateStr);但这个方法可能会处理掉其他有用的字符,所以优先推荐从编码匹配入手解决。
内容的提问来源于stack exchange,提问作者Davide Rizzo
相关产品推荐
相关产品推荐

