我有一个字符串,我想知道它内部是否有unicode字符.(如果它完全包含ASCII或不包含ASCII)
我怎样才能做到这一点?
谢谢!
我正在寻找伪代码或示例代码,以将更高位的ascii字符(例如,将其扩展为ascii 154)转换为U(ascii 85).
我最初的猜测是,由于只有大约25个ascii字符与7bit ascii字符类似,因此必须使用翻译数组.
如果您能想到其他任何事情,请告诉我.
我似乎是一个非常简单和非常需要的方法.我需要从字符串中删除所有非ASCII字符.例如©等.请参阅以下示例.
#coding: utf-8
s = " Hello this a mixed string © that I made."
puts s.encoding
puts s.encode
Run Code Online (Sandbox Code Playgroud)
输出:
UTF-8
Hello this a mixed str
Run Code Online (Sandbox Code Playgroud)
我做的.
当我将其提供给Watir时,会产生以下错误:不兼容的字符编码:UTF-8和ASCII-8BIT
所以我的问题是我想在使用它之前去除所有非ASCII字符.我不知道源字符串"s"使用哪种编码.
我一直在搜索和试验很长一段时间.
如果我尝试使用
puts s.encode('ASCII-8BIT')
Run Code Online (Sandbox Code Playgroud)
它给出了错误:
: "\xC2\xA9" from UTF-8 to ASCII-8BIT (Encoding::UndefinedConversionError)
Run Code Online (Sandbox Code Playgroud) 上传文件到Azure Blob Storage与原来的文件名,并指定文件名作为meta-data该CloudBlob
这些字符是不允许的,meta-data但可以接受为blob名称:
š Š ñ Ñ ç Ç ÿ Ÿ ž Ž Ð œ Œ « » éèëêð ÉÈËÊ àâä ÀÁÂÃÄÅ àáâãäå ÙÚÛÜ ùúûüµ òóôõöø ÒÓÔÕÖØ ìíîï ÌÍÎÏ
Run Code Online (Sandbox Code Playgroud)
meta-data?我们是否遗漏了一些导致此异常的设置?blob和meta-data命名约定,但没有关于数据本身!var dirtyFileName = file.FileName;
var normalizedFileName = file.FileName.CleanOffDiacriticAndNonASCII();
// Blob name accepts almost characters that are acceptable as filenames in Windows
var blob = container.GetBlobReference(dirtyFileName);
//Upload content to …Run Code Online (Sandbox Code Playgroud) 我想在C#中检查char是否包含非ASCII字符.什么是检查特殊字符,如最好的方式?还是??
我想得到一个给定长度的子字符串150.但是,我想确保我不切断unicode字符之间的字符串.
例如,请参阅以下代码:
var str = "Hello world!";
var substr = str.Substring(0, 6);
Run Code Online (Sandbox Code Playgroud)
这substr是一个无效的字符串,因为笑脸字符被切成两半.
相反,我想要一个如下功能:
var str = "Hello world!";
var substr = str.UnicodeSafeSubstring(0, 6);
Run Code Online (Sandbox Code Playgroud)
其中substr包含"你好"
作为参考,以下是我在Objective-C中使用的方法 rangeOfComposedCharacterSequencesForRange
NSString* str = @"Hello world!";
NSRange range = [message rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, 6)];
NSString* substr = [message substringWithRange:range]];
Run Code Online (Sandbox Code Playgroud)
C#中的等效代码是什么?
当我用文本节点设置值时
node.nodeValue="string with &#xxxx; sort of characters"
Run Code Online (Sandbox Code Playgroud)
&符号被逃脱.是否有捷径可寻?
在你开始之前; 是的我知道这是一个重复的问题,是的,我已经查看了发布的解决方案.我的问题是我无法让他们工作.
bool invalidChar (char c)
{
return !isprint((unsigned)c);
}
void stripUnicode(string & str)
{
str.erase(remove_if(str.begin(),str.end(), invalidChar), str.end());
}
Run Code Online (Sandbox Code Playgroud)
我在"Prusæus,Ægyptians"上测试了这种方法,它也没有做任何我试图替代isprint的方法isalnum
真正的问题发生在我的程序的另一部分我转换string-> wstring-> string.如果string-> wstring转换中有unicode字符,则转换为balks.
参考:
编辑:
我仍然想删除所有非ASCII字符,无论它是否有帮助,这里是我崩溃的地方:
// Convert to wstring
wchar_t* UnicodeTextBuffer = new wchar_t[ANSIWord.length()+1];
wmemset(UnicodeTextBuffer, 0, ANSIWord.length()+1);
mbstowcs(UnicodeTextBuffer, ANSIWord.c_str(), ANSIWord.length());
wWord = UnicodeTextBuffer; //CRASH
Run Code Online (Sandbox Code Playgroud)
错误对话框
MSVC++调试库
调试断言失败!
Program:// myproject
文件:f:\ dd\vctools\crt_bld\self_x86\crt\src\isctype.c
行://在上面
表达:(无符号)(C + 1)<= 256
编辑:
进一步复杂化问题:我正在读取的.txt文件是ANSI编码的.内部的一切都应该是有效的.
解:
bool invalidChar (char c)
{
return !(c>=0 && c <128);
} …Run Code Online (Sandbox Code Playgroud) 如何删除VBA中不属于ASCII类别的所有特殊字符?
这些是我的字符串中出现的一些符号,需要将其删除.ŒœŠšƒ还有更多这样的角色.
这不属于ASCII类别,因为您可以看到这个http://www.ascii.cl/htmlcodes.htm
我试过这样的事
strName = Replace(strName, ChrW(376), " ")
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
请帮我解决这个问题.
谢谢Jeevan
一些奇怪的字符存储在其中一个表中.它们似乎来自.csv饲料,因此我对此没有多少控制权.
Hello Kitty Essential Accessory Kit
Run Code Online (Sandbox Code Playgroud)
我该如何清理它并删除这些字符.我可以在db级别或C#中执行此操作.
编辑
根据评论中收到的建议.我也在研究如何在饲料水平上纠正它.这是关于它的更多信息.
我有一个这种格式的字符串:
21?-?10?-?2014? ?15?:?40?:?30
Run Code Online (Sandbox Code Playgroud)
我想以格式制作一个DateTime:
2014-?10?-?21 ?15?:?40?:?30
Run Code Online (Sandbox Code Playgroud)
我试过了:
DateTime dt = DateTime.ParseExact("21?-?10?-?2014? ?15?:?40?:?30", "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
但没有运气,它抛出异常 String was not recognized as a valid DateTime
编辑
我也尝试过:
DateTime dt = DateTime.ParseExact("21-?10?-?2014? ?15?:?40?:?30", "dd-MM-yyyy HH:mm:ss", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
在两个参数中使用相同的格式.例外情况是一样的,所以问题不在于格式之间的区别.我以前检查过.
所以我正在编写一个程序并使用其他人编写的现有库。他们的库正在调用 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);
Run Code Online (Sandbox Code Playgroud)
这是之后立即打印到控制台的内容:
Console.WriteLine("'" + tmdbMovie.Trailers.Youtube[i].Source + "'");
Run Code Online (Sandbox Code Playgroud)
.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 …Run Code Online (Sandbox Code Playgroud)