我的c#剧本:
using System;
using System.Text;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using fomm.Scripting;
class Script : FalloutNewVegasBaseScript {
public static bool install;
// PNH MENU SETTINGS
public static Form installPNHForm;
public static PictureBox backgroundPicture;
public static Button okButton;
public static Button cancelButton;
// Options buttons
public static RadioButton ReadiusRadioButton;
public static Label vanillaIconsLabel;
public static RadioButton Pipboy2005RadioButton;
public static Label pnhLabel;
//Options panel
public static Panel optionsPanel;
public static Label optionsLabel;
public static bool IsPluginActive(String pluginName) {
string[] loadOrder = GetActivePlugins();
for (int i = 0; i < loadOrder.Length; ++i) {
if (loadOrder[i].Equals(pluginName, StringComparison.InvariantCultureIgnoreCase)) {
return true;
}
}
return false;
}
public static Image GetImageFromFomod(string filename) {
byte[] data = GetFileFromFomod(filename);
MemoryStream s = new MemoryStream(data);
Image img = Image.FromStream(s);
s.Close();
return img;
}
public static void CreatePNHForm() {
setUpPNHForm();
setUpPNHBackgroundImage();
setUpPNHHelpertext();
setUpOptions();
setUpButtons();
AttachHandlers();
}
public static void setUpOptions() {
optionsPanel = new Panel();
optionsPanel.Location = new Point(10, 180);
optionsPanel.Size = new Size(267, 50);
optionsPanel.BackColor = Color.WhiteSmoke;
optionsPanel.BorderStyle = BorderStyle.FixedSingle;
backgroundPicture.Controls.Add(optionsPanel);
ReadiusRadioButton = new RadioButton();
ReadiusRadioButton.Checked = true;
ReadiusRadioButton.Location = new Point(15, 15);
ReadiusRadioButton.Size = new Size(20, 20);
vanillaIconsLabel = new Label();
vanillaIconsLabel.Text = "�����";
vanillaIconsLabel.Location = new Point(37, 19);
vanillaIconsLabel.AutoSize = true;
optionsPanel.Controls.Add(ReadiusRadioButton);
optionsPanel.Controls.Add(vanillaIconsLabel);
Pipboy2005RadioButton = new RadioButton();
Pipboy2005RadioButton.Checked = false;
Pipboy2005RadioButton.Location = new Point(168, 16);
Pipboy2005RadioButton.Size = new Size(20, 20);
pnhLabel = new Label();
pnhLabel.Text = "Pipboy2005";
pnhLabel.Location = new Point(190, 19);
pnhLabel.AutoSize = true;
optionsPanel.Controls.Add(Pipboy2005RadioButton);
optionsPanel.Controls.Add(pnhLabel);
}
public static void setUpPNHHelpertext() {
Panel helperTextPanel = new Panel();
helperTextPanel.Location = new Point(60, 130);
helperTextPanel.Size = new Size(170, 30);
helperTextPanel.BackColor = Color.WhiteSmoke;
helperTextPanel.BorderStyle = BorderStyle.FixedSingle;
backgroundPicture.Controls.Add(helperTextPanel);
Label helperTextLabel = new Label();
helperTextLabel.Text = "Readius or Pipboy 2005?";
helperTextLabel.Location = new Point(22, 5);
helperTextLabel.AutoSize = true;
helperTextPanel.Controls.Add(helperTextLabel);
}
public static void setUpPNHForm() {
installPNHForm = CreateCustomForm();
installPNHForm.FormBorderStyle = FormBorderStyle.Fixed3D;
installPNHForm.StartPosition = FormStartPosition.CenterScreen;
installPNHForm.MaximizeBox = false;
installPNHForm.Size = new System.Drawing.Size(300, 360);
installPNHForm.Text = "Readius vs Pipboy 2005";
}
public static void setUpPNHBackgroundImage() {
backgroundPicture = new PictureBox();
backgroundPicture.Location = new Point(0, 0);
backgroundPicture.Size = new Size(292, 327);
// load picture file from .fomod and stream into picture box
// add BackgroundPicture to list of controls
installPNHForm.Controls.Add(backgroundPicture);
}
public static void setUpButtons() {
okButton = new Button();
okButton.Text = "Install";
okButton.BackColor = Color.Silver;
okButton.Location = new Point(148, 286);
okButton.Size = new Size(130, 33);
// cancel button
cancelButton = new Button();
cancelButton.Text = "Cancel";
cancelButton.BackColor = Color.Silver;
cancelButton.Location = new Point(9, 286);
cancelButton.Size = new Size(130, 33);
backgroundPicture.Controls.Add(okButton);
backgroundPicture.Controls.Add(cancelButton);
}
public static void AttachHandlers() {
//Attach a handler that will fire when the apply button is clicked
okButton.Click += delegate(object sender, EventArgs args) {
install = true;
installPNHForm.Close();
};
cancelButton.Click += delegate(object sender, EventArgs args) {
install = false;
installPNHForm.Close();
};
}
public static bool OnActivate() {
CreatePNHForm();
installPNHForm.ShowDialog();
if (install) {
InstallMenu();
}
return install;
}
public static int GetPluginIndex(String pluginName)
{
string[] loadOrder = GetAllPlugins();
for (int i = 0; i < loadOrder.Length; ++i)
{
if (loadOrder[i].Equals(pluginName, StringComparison.InvariantCultureIgnoreCase))
return i;
}
return -1;
}
public static void PlaceAtPlugin(String targetPlugin, String pluginToMove, int offset)
{
int targetPluginIndex = GetPluginIndex(targetPlugin);
int pluginToMoveIndex = GetPluginIndex(pluginToMove);
if (targetPluginIndex != -1 && pluginToMoveIndex != -1)
{
int[] pluginIdxArray = { pluginToMoveIndex };
SetLoadOrder(pluginIdxArray, targetPluginIndex + offset);
}
}
public static void PlaceAfterPlugin(String targetPlugin, String pluginToMove)
{
PlaceAtPlugin(targetPlugin, pluginToMove, 1);
}
public static void PlaceBeforePlugin(String targetPlugin, String pluginToMove)
{
PlaceAtPlugin(targetPlugin, pluginToMove, 0);
}
public static void InstallMenu() {
if (ReadiusRadioButton.Checked) {
CopyDataFile("Readius_NV.bsa", "Readius_NV.bsa");
InstallFileFromFomod("Readius_NV.esp");
if (IsPluginActive("WMX-ArenovalisTextures.esp"))
{
PlaceAfterPlugin("WMX-ArenovalisTextures.esp", "Readius_NV.esp");
}
if (IsPluginActive("TheUltimateGhostOverhaul.esp"))
{
PlaceAfterPlugin("TheUltimateGhostOverhaul.esp", "Readius_NV.esp");
}
SetPluginActivation("Readius_NV.esp", true);
} else if (Pipboy2005RadioButton.Checked) {
CopyDataFile("Pipboy2500.bsa", "Pipboy2500.bsa");
InstallFileFromFomod("Pipboy2500.esp");
if (IsPluginActive("WMX-ArenovalisTextures.esp"))
{
PlaceAfterPlugin("WMX-ArenovalisTextures.esp", "Pipboy2500.esp");
}
if (IsPluginActive("TheUltimateGhostOverhaul.esp"))
{
PlaceAfterPlugin("TheUltimateGhostOverhaul.esp", "Pipboy2500.esp");
}
SetPluginActivation("Pipboy2500.esp", true);
}
}
}
“vanillaIconsLabel.Text =”????“;”,如何在1251代码页中显示? 感谢。
答案 0 :(得分:0)
基本上,不是以你喜欢的方式,或者从表现的角度来看,以一种有意义的方式。
.Net控件是Unicode,并接受Unicode字符串。
你可以在1252年的文件中读取并从中获取一个字符串,就像这里的SO问题所示:
How do I convert from a possibly Windows 1252 'ANSI' encoded uploaded file to UTF8 in .NET?
或在1251年:
Convert Latin 1 encoded UTF8 to Unicode
但这不是将值转换为Label控件的好方法。
您应该将源文本转换为Unicode,并让它们都是原生的。
如果您打算考虑支持不同的语言,那么您可能也想要使用.net RESX系统进行调查。
答案 1 :(得分:0)
很难确切地说出这里发生了什么:程序是否显示文字错误,还是只是VS?
我猜这只是VS的一个问题,而且你的文本编码正确,但VS中没有显示正确的编码。
您可以强制VS在VS中以特定编码显示文本文件,如下所示:
右键单击文件 - &gt;打开... - &gt;带编码的CSharp编辑器 - &gt; {选择编码}
除非您知道文件的编码是什么,否则您将不得不逐个进行试错。一些尝试:
(自动检测)
Unicode(UTF-8无签名) - 代码页65001
Unicode - 代码页1200
但是,您的文件可能不是Unicode,也许是ANSI,这意味着您必须选择一个代码页,即“语言”来显示它。您对这种语言有什么想法吗?
如果所有其他方法都失败了,也许您可以将文件附加到某处,或指出可以下载的位置,那么我们可以看看。
答案 2 :(得分:0)
行。 Bitaweb.com/en/codeConverter.html没有帮助我。然后我在记事本中打开我的代码script.cs,以UTF-8保存,问题就消失了。整个问题在C#编辑器中,它只保留ANSI,而不是UTF-8。