UTF16으로 인코딩 된 JSON 파일을 구문 분석하려고하는데 이상한 문제가 발생했습니다.InputStreamReader, FileInputStream이 파일 시작을 중간 대신 시작합니다.
FileInputStream
을 사용할 때마다 파일 구문 분석이 중간 지점부터 시작되는 것 같습니다. 예를 들어, 파일의 길이가 40 자이면 문자 20에서 시작합니다. JSON을 구문 분석 할 때 오류가 발생합니다. 분명히 데이터가 파일의 문자 0에서 시작됩니다.
몇 주 동안 일 했음에도 불구하고이 문제는 요즘 날카롭게되었습니다. 문제가 시작될 때까지 변경되지 않았기 때문에 코드에 아무런 문제가 없음을 알 수 있습니다.
내 시도 된 해결 방법 중 하나는 FileReader
을 사용하는 것으로 전환하는 것입니다. 일반적으로 문자 0에서 시작되지만 문서에서 UTF-16 문자를 처리 할 수는 없으므로 문제가 해결되지 않습니다.
Google의 Gson 라이브러리를 사용하여 JSON을 처리하지만이 문제는 InputStreamReader
또는 FileInputStream
에있는 것으로 생각됩니다.
아래는 문제가되는 코드입니다.
JsonReader reader = new JsonReader(new InputStreamReader(new FileInputStream(file), "UTF-16"));
reader.beginArray();
...
여기에 오류가 있습니다. 위의 reader.beginArray();
줄은 예외입니다.
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 21
at com.google.gson.stream.JsonReader.expect(JsonReader.java:337)
at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:304)
at reader.ProofDatabase.load(ProofDatabase.java:130)
...
그리고 여기가, UTF16 문자열
JsonReader reader = new JsonReader(new FileReader(file));
reader.beginArray();
...
모든 솔루션을 처리 그것을 원래의 문제에 대한 수정, 또는 UTF16으로 파일에 읽기의 다른 방법을하지 않는 내 부분적인 해결 방법입니다 환영받을 것이 아닌가.
JSON 파일이 Byte Order Marker로 시작합니까? 어떻게 생성됩니까? – Joni
현재 사용중인 파일은 직접 작성되었습니다. 수동으로 올바른 json을 입력 한 것처럼. 이전 파일은 gson 라이브러리의'JsonWriter' 클래스를 사용하여 생성되었습니다. –
어떤 편집기를 사용하셨습니까? – Joni