Два запитання тут. У мене є набір файлів, які зазвичай є UTF-8 із специфікацією. Я хотів би перетворити їх (в ідеалі на місці) на UTF-8 без специфікації. Здається codecs.StreamRecoder(stream, encode, decode, Reader, Writer, errors)
, впорався б із цим. Але я насправді не бачу хороших прикладів використання. Чи був би це найкращий спосіб з цим впоратися?
source files:
Tue Jan 17$ file brh-m-157.json
brh-m-157.json: UTF-8 Unicode (with BOM) text
Крім того, було б ідеально, якби ми могли обробляти різні вхідні кодування без явного знання (див. ASCII та UTF-16). Здається, все це повинно бути здійсненним. Чи є рішення, яке може прийняти будь-яке відоме кодування та виведення Python як UTF-8 без специфікації?
редагувати 1 запропонований sol'n знизу (дякую!)
fp = open('brh-m-157.json','rw')
s = fp.read()
u = s.decode('utf-8-sig')
s = u.encode('utf-8')
print fp.encoding
fp.write(s)
Це дає мені таку помилку:
IOError: [Errno 9] Bad file descriptor
Екстрене повідомлення
У коментарях мені кажуть, що помилка полягає в тому, що я відкриваю файл у режимі 'rw' замість 'r +' / 'r + b', тому зрештою я повинен перередагувати своє запитання та видалити вирішену частину.
r+
режимі. Додайтеb
занадто, щоб він працював і в Windows, без жодних смішних рядків, що закінчують бізнес. Нарешті, вам захочеться повернутися до початку файлу та скоротити його в кінці - див. Мою оновлену відповідь.