@@ -4,7 +4,7 @@ import alert from "dialogs/alert";
44import confirm from "dialogs/confirm" ;
55import loader from "dialogs/loader" ;
66import { reopenWithNewEncoding } from "palettes/changeEncoding" ;
7- import { decode } from "utils/encodings" ;
7+ import { decode , detectEncoding } from "utils/encodings" ;
88import helpers from "utils/helpers" ;
99import EditorFile from "./editorFile" ;
1010import fileTypeHandler from "./fileTypeHandler" ;
@@ -84,7 +84,7 @@ export default async function openFile(file, options = {}) {
8484 const fileInfo = await fs . stat ( ) ;
8585 const name = fileInfo . name || file . filename || uri ;
8686 const readOnly = fileInfo . canWrite ? false : true ;
87- const createEditor = ( isUnsaved , text ) => {
87+ const createEditor = ( isUnsaved , text , detectedEncoding ) => {
8888 new EditorFile ( name , {
8989 uri,
9090 text,
@@ -93,7 +93,7 @@ export default async function openFile(file, options = {}) {
9393 render,
9494 onsave,
9595 readOnly,
96- encoding,
96+ encoding : detectedEncoding || encoding ,
9797 SAFMode : mode ,
9898 } ) ;
9999 } ;
@@ -385,12 +385,21 @@ export default async function openFile(file, options = {}) {
385385 }
386386
387387 const binData = await fs . readFile ( ) ;
388- const fileContent = await decode (
389- binData ,
390- file . encoding || appSettings . value . defaultFileEncoding ,
391- ) ;
392388
393- createEditor ( false , fileContent ) ;
389+ // Detect encoding if not explicitly provided
390+ let detectedEncoding = file . encoding || encoding ;
391+ if ( ! detectedEncoding ) {
392+ try {
393+ detectedEncoding = await detectEncoding ( binData ) ;
394+ } catch ( error ) {
395+ console . warn ( "Encoding detection failed, using default:" , error ) ;
396+ detectedEncoding = appSettings . value . defaultFileEncoding ;
397+ }
398+ }
399+
400+ const fileContent = await decode ( binData , detectedEncoding ) ;
401+
402+ createEditor ( false , fileContent , detectedEncoding ) ;
394403 if ( mode !== "single" ) recents . addFile ( uri ) ;
395404 return ;
396405 } catch ( error ) {
0 commit comments