所以我正在编写一个程序并使用其他人编写的现有库。他们的图书馆正在调用TheMovieDatabase.com并检索有关电影的信息,包括Youtube预告片名称,如'sErD7Y00R_8'。
当我调试并查看拖车名称字符串变量时,该值存储在其中,它显示为'sErD7Y00R_8',但是当它插入我的数据库或打印到控制台时,它似乎附加了一个? (问号)到底,看起来像这样:'sErD7Y00R_8?'
这显然给我带来了一些问题。我无法弄清楚它为什么这样做以及如何解决它。我只能猜测它是一些非常规的文本字符,但这只是猜测。
以下是包装器库的链接: https://github.com/LordMike/TMDbLib/
这是我在包装器库中调用的方法,传入ID 143049:
TMDbLib.Objects.Movies.Movie tmdbMovie = client.GetMovie(id, MovieMethods.Credits | MovieMethods.Keywords | MovieMethods.Images | MovieMethods.Trailers | MovieMethods.Reviews | MovieMethods.Releases);
以下是紧接着之后的打印到控制台:
Console.WriteLine("'" + tmdbMovie.Trailers.Youtube[i].Source + "'");
.Length属性返回12所以它看起来是1个字符,它没有在调试器中显示但打印出来的是?在控制台
根据评论,我打印出了Encoding.GetBytes的详细信息:
Encoding the entire string:
System.Text.UTF7Encoding : 20 38 :73 45 72 44 37 59 30 30 52 2B 41 46 38 2D 38 2B 49 41 34 2D
System.Text.UTF8Encoding : 14 39 :73 45 72 44 37 59 30 30 52 5F 38 E2 80 8E
System.Text.UnicodeEncoding : 24 26 :73 00 45 00 72 00 44 00 37 00 59 00 30 00 30 00 52 00 5F 00 38 00 0E 20
System.Text.UnicodeEncoding : 24 26 :00 73 00 45 00 72 00 44 00 37 00 59 00 30 00 30 00 52 00 5F 00 38 20 0E
System.Text.UTF32Encoding : 48 52 :73 00 00 00 45 00 00 00 72 00 00 00 44 00 00 00 37 00 00 00 59 00 00 00 30 00 00 00 30 00 00 00 52 00 00 00 5F 00 00 00 38 00 00 00 0E 20 00 00
答案 0 :(得分:3)
似乎问题出现是因为编码不匹配,因为字符串应该是ASCII编码,我们可以删除非ASCII字符以解决不匹配问题。
为此,我们可以使用Regex查找非ASCII字符([^\u0000-\u007F]
)并将其替换为空字符串:
str=Regex.Replace(str, @"[^\u0000-\u007F]", string.Empty);
答案 1 :(得分:0)
你可能是正确的,它是一个编码不匹配产生?。但最重要的是,你能做什么?除非您打算更改TMDbLib,否则您唯一真正的选择是以启发式方式清除tmdbMovie.Trailers.Youtube [i] .Source的返回值。