Если вам нужны символы, так и читайте символы, а не байты - см. класс Reader с наследниками. А то что вы написали - прокатит только для ASCII-подмножества юникод-алфавита, во всех остальных случаях вы закономерно получите ерунду (вопросики). Если файл в однобайтовой кодировке получите ерунду, и тем более ерунду если в многобайтовой. Именно преобразуете код символа в char вы правильно, только на вход этой операции наверняка подаёте что-нибудь не то.