2016-08-14 6 views
-1

У меня есть текстовые файлы с акцентированными символами, но я не знаю кодировки, и я хочу, чтобы текст отображался как есть в NSTextField.Как читать файл в NSSrting без кодирования?

Я могу использовать [NSString stringWithContentsOfFile:], но этот метод устарел. Все остальные методы требуют, чтобы пользователь предоставлял текстовое кодирование. Я не хочу использовать какие-либо методы, которые будут пытаться угадать в кодировке, потому что: 1. они не будут работать все время, 2. Мне просто нужно отображать содержимое файла так, как оно есть в NSTextField ,

Итак, что мне делать?

+1

Это не будет работать, как он вычеркивает акценты в тексте. – Kuro

ответ

2

Я действительно просто хочу отобразить содержимое файла так, как оно есть в NSTextField.

Вы просите невозможного, «как она есть» зависит от кодировки. Файл содержит последовательность байтов, которые представляют собой только строки из восьми 0 & 1's. Вы должны интерпретировать эти строки бит. Вы можете взять их по четыре за раз и интерпретировать их как 32-битные целые числа, или 32-битные поплавки, или UTF32 - и каждый раз вы получите другой результат. Или вы можете принимать их по одному и интерпретировать их как ASCII, UTF, EBCDIC и т. Д. И т. Д. И т. Д. - и вы получите разные результаты.

Ближе всего вы добираетесь до «способа, которым это необходимо», чтобы сбрасывать байты в двоичном, восьмеричном или шестнадцатеричном виде - то есть, что команда командной строки od сделает для вас. Вы можете попытаться выяснить это, например. как это делает команда file, или вам нужно знать. (Смотри также this question.)

+0

Текстовый файл, который я пытаюсь прочитать, - это файл субтитров SRT. Он может содержать что-то вроде этого: " 00: 03:? 45589 -> 00: 03: 48822 Подавать Aiuto c'è Nessuno " Поскольку я не знаю кодировку текста SRT, как я могу читать его с помощью специальной кодировки символов? Устаревший метод позволяет мне прочитать исходный текстовый файл как есть в NSString – Kuro

+0

Если я следую тому, что вы делаете, ваш подход неверен, см. Ваш [связанный вопрос] (http://stackoverflow.com/questions/38940571/ how-to-display-accented-characters-using-nsmutableattributedstring) – CRD

+1

BRW устаревший метод 'stringWithContentsOfFile:', не позволял вам читать as-is; скорее, он интерпретировал содержимое файла, определяя кодировку или используя стандартную версию - проверьте ее [документацию] (https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/ index.html # // apple_ref/occ/clm/NSString/stringWithContentsOfFile :) – CRD

-1

Я закончил с использованием:

[NSString stringWithContentsOfFile:filePath encoding:[NSString defaultCStringEncoding] error:nil] 

Это дает мне тот же результат, как [NSString stringWithContentsOfFile:]

+0

вы не согласны с этим ответом .. вы не хотите «догадываться», но это то, что вы делаете сейчас;) - методы для правильной угадывания работы лучше, чем ваш «предположение» тоже –

+0

В конце концов, я попытался сначала использовать UTF8, а затем defaultCStringEncoding. Это, похоже, работает для цели и цели того, что я делаю. Это тот же результат, который я получил от '[NSString stringWithContentsOfFile:]' – Kuro