Como lidar com problemas de codificação java (especialmente xml)?

Pesquisei sobre java e codificação e não encontrei um recurso explicando como lidar com problemas comuns que surgem em java ao codificar e decodificar seqüências de caracteres. Existem muitas perguntas específicas sobre erros únicos, mas não encontrei um amplo guia de resposta / referência para o problema. As principais perguntas são:

O que é codificação de String?

Por que em Java posso ler arquivos com caracteres errados?

Por que, ao lidar com xml, recebi o byte x inválido da exceção UTF-8 da seqüência de bytes y? Quais são as principais causas e como evitá-las?

questionAnswers(1)

yourAnswerToTheQuestion