diff --git a/src/NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs b/src/NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs index aba34f9c6..1b8b625ee 100644 --- a/src/NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs +++ b/src/NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs @@ -1,9 +1,11 @@ using System; +using System.Globalization; using System.IO; +using System.Text; using MediaInfoLib; using NLog; using NzbDrone.Common.Disk; -using System.Globalization; +using NzbDrone.Common.EnvironmentInfo; namespace NzbDrone.Core.MediaFiles.MediaInfo { @@ -39,7 +41,19 @@ namespace NzbDrone.Core.MediaFiles.MediaInfo _logger.Debug("Getting media info from {0}", filename); mediaInfo.Option("ParseSpeed", "0.2"); - int open = mediaInfo.Open(filename); + + int open; + if (OsInfo.IsWindows) + { + open = mediaInfo.Open(filename); + } + else + { + // On non-Windows the wrapper uses the ansi library methods, which libmediainfo converts internally to unicode from multibyte (utf8). + // To avoid building MediaInfoDotNet ourselves we simply trick the wrapper to send utf8 strings instead of ansi. + var utf8filename = Encoding.Default.GetString(Encoding.UTF8.GetBytes(filename)); + open = mediaInfo.Open(utf8filename); + } if (open != 0) { @@ -108,6 +122,10 @@ namespace NzbDrone.Core.MediaFiles.MediaInfo return mediaInfoModel; } + else + { + _logger.Warn("Unable to open media info from file: " + filename); + } } catch (DllNotFoundException ex) {