我正在尝试从 srt 文件中读取内容,并且我正在使用 Java 的 BufferedReader 逐行读取文件。 srt 文件的内容是:
2
00:00:40,665 --> 00:00:44,806
<i>♪ Nants ingonyama ♪</i>
代码片段如下:
public void parseSubtitles(@NonNull final MultipartFile subtitleFile) {
InputStream is = subtitleFile.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
在调试代码时,通过添加断点,我发现在读取第一行
2
时,字节数组值为[-3, -1, -3, -1, 50, 0, 0, 0]
。
那么下一行只是一个字节数组,其值为
[0]
下一行是
[0, 48, 0, 48, 0, 58, 0, 48, 0, 48, 0, 58, 0, 52, 0, 48, 0, 44, 0, 54, 0, 54, 0, 53, 0, 32, 0, 45, 0, 45, 0, 62, 0, 32, 0, 48, 0, 48, 0, 58, 0, 48, 0, 48, 0, 58, 0, 52, 0, 52, 0, 44, 0, 56, 0, 48, 0, 54, 0]
,在本例中是字幕的时间间隔。
其他字幕文件的情况并非如此,因为字节数组中没有
0
值,也没有像具有空值 [0]
的字节数组那样的垃圾行。
知道可能导致此问题的原因吗?
我的猜测是您应该阅读为 UTF-16。指示标志是每个非空字节之前的空字节。这意味着 UTF-16 的两字节编码对于“ascii”字符来说是多余的,这就是为什么 UTF-8 被更多地使用,除了某些语言的情况