mjeanroy / exiftool

Enhanced Java Integration for Phil Harvey's ExifTool.
Apache License 2.0
74 stars 24 forks source link

Support Unicode character in file path #442

Open Aliang-code opened 1 month ago

Aliang-code commented 1 month ago

when I have some Unicode character in my image path(.e.g D:\相册\LR\相册\佳能\103___04\IMG_0661.jpg) and then enable stayOpen flag, it always return "File not Found". I have checked issuse at forum, got this : https://www.photools.com/community/index.php?topic=10740.0

The key part is -charset filename=UTF8 which tells ExifTool that the file name is in UTF-8 encoding. German umlauts, Chinese, Russian or other non-ASCII characters no problem.

So i extend StandardOptions (unfortunately it was final class), like this:

public class SupportUtf8FileNameOptions implements ExifToolOptions {
    private StandardOptions standardOptions;

    public SupportUtf8FileNameOptions(StandardOptions standardOptions) {
        this.standardOptions = standardOptions;
    }

    @Override
    public Iterable<String> serialize() {
        List<String> arguments = (List<String>) standardOptions.serialize();
        arguments.add("-charset");
        arguments.add("filename=UTF8");
        return arguments;
    }
}

now it running well for unicode character path

exifTool.getImageMeta(new File("D:\\相册\\LR\\相册\\佳能\\103___04\\IMG_0661.jpg"),
                new SupportUtf8FileNameOptions(StandardOptions.builder().withFormat(StandardFormat.NUMERIC).build()),
                StandardTags.values());

Therefore, hope that StandardOptions.Builder().withCharset can support custom content, just change the parameter type to String