@ideas4ru

Проблемы с кодировкой при работе с VKontakte API через Java и GSON?

Всем привет!


Написал код на яве, чтобы получать имя пользователя Вконтакте с заданным uid.

String request = "https://api.vk.com/method/users.get?uids=" + 1 + "&fields=first_name,last_name&access_token=" + accessToken; //для Павла Дурова
		
		try {
			URL url = new URL(request);
			HttpsURLConnection con = (HttpsURLConnection)url.openConnection();
			BufferedReader inReader = new BufferedReader(new InputStreamReader(con.getInputStream()));

			String inputLine;
	        while ((inputLine = inReader.readLine()) != null) {
	        	int beginIndex = inputLine.indexOf('[');
			int endIndex = inputLine.indexOf(']');
			inputLine = inputLine.substring(beginIndex + 1, endIndex);
	                 VKPerson vkPerson = new Gson().fromJson(inputLine, VKPerson.class);
	        	System.out.println(vkPerson);
	        }

	        inReader.close();
		} catch (Exception e) {
			e.printStackTrace(System.err);
		}



Класс VKPerson для GSON:
public class VKPerson {
	private Integer uid;
	private String first_name;
	private String last_name;

	public Integer getUid () {return uid;}
	public String getFirst_name () {return first_name;}
	public String getLast_name () {return last_name;}

	public void setUid (Integer uid) {this.uid = uid;}
	public void setFirst_name (String first_name) {this.first_name = first_name;}
	public void setLast_name (String last_name) {this.last_name = last_name;}

	public String toString () {
		//TODO: charset conversion
		return String.format("uid: %d; first_name: %s; last_name: %s", uid, first_name, last_name);
	}
}



В итоге строчка-ответ выглядит так

{«response»:[{«uid»:1,«first_name»:"Павел",«last_name»:"Дуров"}]}

а VKPerson печает

uid: 1; first_name: Павел; last_name: Дуров


Знаю, что надо сконвертировать данные из cp-1251utf-8, в которой ВК отдает русские имена. Но видимо это уже надо делать после работы Gson().fromJson. Но тогда из каждого символа изначальной строчки получается два байта в строках класса VKPerson.
  • Вопрос задан
  • 7867 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Moxa
скорее всего проблема тут

BufferedReader inReader = new BufferedReader(new InputStreamReader(con.getInputStream()));

выставите для InputStreamReader необходимую кодировку
Ответ написан
@Moxa
вы уверены, что там кодировка cp1251? что-то мне подсказывает, что все-таки utf-8
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы