问号("?")附加到字符串

时间:2015-03-31 23:24:34

标签: c# string unicode strip

所以我正在编写一个程序并使用其他人编写的现有库。他们的图书馆正在调用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 

Debug screenshot

2 个答案:

答案 0 :(得分:3)

似乎问题出现是因为编码不匹配,因为字符串应该是ASCII编码,我们可以删除非ASCII字符以解决不匹配问题。

为此,我们可以使用Regex查找非ASCII字符([^\u0000-\u007F])并将其替换为空字符串:

str=Regex.Replace(str, @"[^\u0000-\u007F]", string.Empty);

答案 1 :(得分:0)

你可能是正确的,它是一个编码不匹配产生?。但最重要的是,你能做什么?除非您打算更改TMDbLib,否则您唯一真正的选择是以启发式方式清除tmdbMovie.Trailers.Youtube [i] .Source的返回值。