我正在尝试检测播放器的写入txt是什么语言。最后一个问题,我遇到了一些困难。
这是我的代码:
String[] words = player.LastChat.Trim().Split(new Char[]{' ','\t',',','.',':','!','?',';','(',')',']','[','"'});
StringBuilder edited = new StringBuilder();
// Remove exception list words from line
foreach (String w in words) {
if (plugin.isInList(w, "good_words")) {
continue;
}
edited.Append(w);
edited.Append(" ");
}
// URL Encode edited string
String UnreservedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~";
StringBuilder Result = new StringBuilder();
String Input = edited.ToString();
for (int x = 0; x < Input.Length; ++x)
{
if (UnreservedChars.IndexOf(Input[x]) != -1)
Result.Append(Input[x]);
else
Result.Append("%").Append(String.Format("{0:X2}", (int)Input[x]));
}
String key = "API KEY";
// Test for badness
bool jsonresult = false;
try {
WebClient client = new WebClient();
String json = client.DownloadString("https://www.googleapis.com/language/translate/v2/detect?key=" + key + "&q=" + Result.ToString());
jsonresult = json.Contains("en");
} catch (Exception e) {
plugin.ConsoleWrite("Language check failed! Error: " + e);
}
if (!jsonresult) {
return true;
}
plugin.ConsoleWrite("Language: " + jsonresult);
return jsonresult; // for Actions
所以,我想要实现的是,如果它是除了&#34; en&#34;之外的任何其他语言,则返回true。 (英语),但无论如何它都会回归。
Google的回复是:
{
"data": {
"detections": [
[
{
"language": "en",
"isReliable": false,
"confidence": 0.03396887
}
]
]
}
}
非常感谢任何帮助,我不知道如何编码,这段代码是从另一个脚本借来的。
问候。
答案 0 :(得分:4)
要使方法按所描述的方式工作,您应该更改:
if (!jsonresult) {
return true;
}
plugin.ConsoleWrite("Language: " + jsonresult);
return jsonresult;
到:
plugin.ConsoleWrite("Language: " + jsonresult);
return !jsonresult;
也是这一行
jsonresult = json.Contains("en");
正在检查json文本中是否出现"en"
(并且在json中的"confidence"
中找到)。你应该做的是使用json.net(或其他lib)解析Json,或者只是这样做(但是这是一个丑陋的黑客攻击):
jsonresult = json.Contains("\"language\": \"en\",");